···6464 return -ENOSYS;65656666 if (flags & SPU_CREATE_AFFINITY_SPU) {6767- struct fd neighbor = fdget(neighbor_fd);6767+ CLASS(fd, neighbor)(neighbor_fd);6868 ret = -EBADF;6969- if (fd_file(neighbor)) {6969+ if (!fd_empty(neighbor))7070 ret = calls->create_thread(name, flags, mode, fd_file(neighbor));7171- fdput(neighbor);7272- }7371 } else7472 ret = calls->create_thread(name, flags, mode, NULL);7573
+3-7
arch/x86/kernel/cpu/sgx/main.c
···901901int sgx_set_attribute(unsigned long *allowed_attributes,902902 unsigned int attribute_fd)903903{904904- struct fd f = fdget(attribute_fd);904904+ CLASS(fd, f)(attribute_fd);905905906906- if (!fd_file(f))906906+ if (fd_empty(f))907907 return -EINVAL;908908909909- if (fd_file(f)->f_op != &sgx_provision_fops) {910910- fdput(f);909909+ if (fd_file(f)->f_op != &sgx_provision_fops)911910 return -EINVAL;912912- }913911914912 *allowed_attributes |= SGX_ATTR_PROVISIONKEY;915915-916916- fdput(f);917913 return 0;918914}919915EXPORT_SYMBOL_GPL(sgx_set_attribute);
+13-26
arch/x86/kvm/svm/sev.c
···530530531531static int __sev_issue_cmd(int fd, int id, void *data, int *error)532532{533533- struct fd f;534534- int ret;533533+ CLASS(fd, f)(fd);535534536536- f = fdget(fd);537537- if (!fd_file(f))535535+ if (fd_empty(f))538536 return -EBADF;539537540540- ret = sev_issue_cmd_external_user(fd_file(f), id, data, error);541541-542542- fdput(f);543543- return ret;538538+ return sev_issue_cmd_external_user(fd_file(f), id, data, error);544539}545540546541static int sev_issue_cmd(struct kvm *kvm, int id, void *data, int *error)···20682073{20692074 struct kvm_sev_info *dst_sev = &to_kvm_svm(kvm)->sev_info;20702075 struct kvm_sev_info *src_sev, *cg_cleanup_sev;20712071- struct fd f = fdget(source_fd);20762076+ CLASS(fd, f)(source_fd);20722077 struct kvm *source_kvm;20732078 bool charged = false;20742079 int ret;2075208020762076- if (!fd_file(f))20812081+ if (fd_empty(f))20772082 return -EBADF;2078208320792079- if (!file_is_kvm(fd_file(f))) {20802080- ret = -EBADF;20812081- goto out_fput;20822082- }20842084+ if (!file_is_kvm(fd_file(f)))20852085+ return -EBADF;2083208620842087 source_kvm = fd_file(f)->private_data;20852088 ret = sev_lock_two_vms(kvm, source_kvm);20862089 if (ret)20872087- goto out_fput;20902090+ return ret;2088209120892092 if (kvm->arch.vm_type != source_kvm->arch.vm_type ||20902093 sev_guest(kvm) || !sev_guest(source_kvm)) {···21292136 cg_cleanup_sev->misc_cg = NULL;21302137out_unlock:21312138 sev_unlock_two_vms(kvm, source_kvm);21322132-out_fput:21332133- fdput(f);21342139 return ret;21352140}21362141···2789279827902799int sev_vm_copy_enc_context_from(struct kvm *kvm, unsigned int source_fd)27912800{27922792- struct fd f = fdget(source_fd);28012801+ CLASS(fd, f)(source_fd);27932802 struct kvm *source_kvm;27942803 struct kvm_sev_info *source_sev, *mirror_sev;27952804 int ret;2796280527972797- if (!fd_file(f))28062806+ if (fd_empty(f))27982807 return -EBADF;2799280828002800- if (!file_is_kvm(fd_file(f))) {28012801- ret = -EBADF;28022802- goto e_source_fput;28032803- }28092809+ if (!file_is_kvm(fd_file(f)))28102810+ return -EBADF;2804281128052812 source_kvm = fd_file(f)->private_data;28062813 ret = sev_lock_two_vms(kvm, source_kvm);28072814 if (ret)28082808- goto e_source_fput;28152815+ return ret;2809281628102817 /*28112818 * Mirrors of mirrors should work, but let's not get silly. Also···2846285728472858e_unlock:28482859 sev_unlock_two_vms(kvm, source_kvm);28492849-e_source_fput:28502850- fdput(f);28512860 return ret;28522861}28532862
+7-16
drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
···3535 int fd,3636 int32_t priority)3737{3838- struct fd f = fdget(fd);3838+ CLASS(fd, f)(fd);3939 struct amdgpu_fpriv *fpriv;4040 struct amdgpu_ctx_mgr *mgr;4141 struct amdgpu_ctx *ctx;4242 uint32_t id;4343 int r;44444545- if (!fd_file(f))4545+ if (fd_empty(f))4646 return -EINVAL;47474848 r = amdgpu_file_to_fpriv(fd_file(f), &fpriv);4949- if (r) {5050- fdput(f);4949+ if (r)5150 return r;5252- }53515452 mgr = &fpriv->ctx_mgr;5553 mutex_lock(&mgr->lock);···5557 amdgpu_ctx_priority_override(ctx, priority);5658 mutex_unlock(&mgr->lock);57595858- fdput(f);5960 return 0;6061}6162···6366 unsigned ctx_id,6467 int32_t priority)6568{6666- struct fd f = fdget(fd);6969+ CLASS(fd, f)(fd);6770 struct amdgpu_fpriv *fpriv;6871 struct amdgpu_ctx *ctx;6972 int r;70737171- if (!fd_file(f))7474+ if (fd_empty(f))7275 return -EINVAL;73767477 r = amdgpu_file_to_fpriv(fd_file(f), &fpriv);7575- if (r) {7676- fdput(f);7878+ if (r)7779 return r;7878- }79808081 ctx = amdgpu_ctx_get(fpriv, ctx_id);81828282- if (!ctx) {8383- fdput(f);8383+ if (!ctx)8484 return -EINVAL;8585- }86858786 amdgpu_ctx_priority_override(ctx, priority);8887 amdgpu_ctx_put(ctx);8989- fdput(f);9090-9188 return 0;9289}9390
+3-6
drivers/gpu/drm/drm_syncobj.c
···712712 int fd, u32 *handle)713713{714714 struct drm_syncobj *syncobj;715715- struct fd f = fdget(fd);715715+ CLASS(fd, f)(fd);716716 int ret;717717718718- if (!fd_file(f))718718+ if (fd_empty(f))719719 return -EINVAL;720720721721- if (fd_file(f)->f_op != &drm_syncobj_file_fops) {722722- fdput(f);721721+ if (fd_file(f)->f_op != &drm_syncobj_file_fops)723722 return -EINVAL;724724- }725723726724 /* take a reference to put in the idr */727725 syncobj = fd_file(f)->private_data;···737739 } else738740 drm_syncobj_put(syncobj);739741740740- fdput(f);741742 return ret;742743}743744
+4-9
drivers/media/rc/lirc_dev.c
···815815816816struct rc_dev *rc_dev_get_from_fd(int fd, bool write)817817{818818- struct fd f = fdget(fd);818818+ CLASS(fd, f)(fd);819819 struct lirc_fh *fh;820820 struct rc_dev *dev;821821822822- if (!fd_file(f))822822+ if (fd_empty(f))823823 return ERR_PTR(-EBADF);824824825825- if (fd_file(f)->f_op != &lirc_fops) {826826- fdput(f);825825+ if (fd_file(f)->f_op != &lirc_fops)827826 return ERR_PTR(-EINVAL);828828- }829827830830- if (write && !(fd_file(f)->f_mode & FMODE_WRITE)) {831831- fdput(f);828828+ if (write && !(fd_file(f)->f_mode & FMODE_WRITE))832829 return ERR_PTR(-EPERM);833833- }834830835831 fh = fd_file(f)->private_data;836832 dev = fh->rc;837833838834 get_device(&dev->dev);839839- fdput(f);840835841836 return dev;842837}
···10031003 dfd, filename, flags);1004100410051005 if (filename == NULL) {10061006- struct fd f = fdget(dfd);10061006+ CLASS(fd, f)(dfd);1007100710081008- ret = -EBADF;10091009- if (!fd_file(f))10101010- goto out;10081008+ if (fd_empty(f))10091009+ return -EBADF;1011101010121012- ret = -ENOTDIR;10131011 if ((flags & FAN_MARK_ONLYDIR) &&10141014- !(S_ISDIR(file_inode(fd_file(f))->i_mode))) {10151015- fdput(f);10161016- goto out;10171017- }10121012+ !(S_ISDIR(file_inode(fd_file(f))->i_mode)))10131013+ return -ENOTDIR;1018101410191015 *path = fd_file(f)->f_path;10201016 path_get(path);10211021- fdput(f);10221017 } else {10231018 unsigned int lookup_flags = 0;10241019
+5-12
fs/notify/inotify/inotify_user.c
···794794{795795 struct fsnotify_group *group;796796 struct inotify_inode_mark *i_mark;797797- struct fd f;798798- int ret = -EINVAL;797797+ CLASS(fd, f)(fd);799798800800- f = fdget(fd);801801- if (unlikely(!fd_file(f)))799799+ if (fd_empty(f))802800 return -EBADF;803801804802 /* verify that this is indeed an inotify instance */805803 if (unlikely(fd_file(f)->f_op != &inotify_fops))806806- goto out;804804+ return -EINVAL;807805808806 group = fd_file(f)->private_data;809807810808 i_mark = inotify_idr_find(group, wd);811809 if (unlikely(!i_mark))812812- goto out;813813-814814- ret = 0;810810+ return -EINVAL;815811816812 fsnotify_destroy_mark(&i_mark->fsn_mark, group);817813818814 /* match ref taken by inotify_idr_find */819815 fsnotify_put_mark(&i_mark->fsn_mark);820820-821821-out:822822- fdput(f);823823- return ret;816816+ return 0;824817}825818826819/*
+15-21
fs/open.c
···349349350350int ksys_fallocate(int fd, int mode, loff_t offset, loff_t len)351351{352352- struct fd f = fdget(fd);353353- int error = -EBADF;352352+ CLASS(fd, f)(fd);354353355355- if (fd_file(f)) {356356- error = vfs_fallocate(fd_file(f), mode, offset, len);357357- fdput(f);358358- }359359- return error;354354+ if (fd_empty(f))355355+ return -EBADF;356356+357357+ return vfs_fallocate(fd_file(f), mode, offset, len);360358}361359362360SYSCALL_DEFINE4(fallocate, int, fd, int, mode, loff_t, offset, loff_t, len)···664666665667SYSCALL_DEFINE2(fchmod, unsigned int, fd, umode_t, mode)666668{667667- struct fd f = fdget(fd);668668- int err = -EBADF;669669+ CLASS(fd, f)(fd);669670670670- if (fd_file(f)) {671671- err = vfs_fchmod(fd_file(f), mode);672672- fdput(f);673673- }674674- return err;671671+ if (fd_empty(f))672672+ return -EBADF;673673+674674+ return vfs_fchmod(fd_file(f), mode);675675}676676677677static int do_fchmodat(int dfd, const char __user *filename, umode_t mode,···856860857861int ksys_fchown(unsigned int fd, uid_t user, gid_t group)858862{859859- struct fd f = fdget(fd);860860- int error = -EBADF;863863+ CLASS(fd, f)(fd);861864862862- if (fd_file(f)) {863863- error = vfs_fchown(fd_file(f), user, group);864864- fdput(f);865865- }866866- return error;865865+ if (fd_empty(f))866866+ return -EBADF;867867+868868+ return vfs_fchown(fd_file(f), user, group);867869}868870869871SYSCALL_DEFINE3(fchown, unsigned int, fd, uid_t, user, gid_t, group)
···190190191191int ksys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice)192192{193193- struct fd f = fdget(fd);194194- int ret;193193+ CLASS(fd, f)(fd);195194196196- if (!fd_file(f))195195+ if (fd_empty(f))197196 return -EBADF;198197199199- ret = vfs_fadvise(fd_file(f), offset, len, advice);200200-201201- fdput(f);202202- return ret;198198+ return vfs_fadvise(fd_file(f), offset, len, advice);203199}204200205201SYSCALL_DEFINE4(fadvise64_64, int, fd, loff_t, offset, loff_t, len, int, advice)
+5-12
mm/readahead.c
···673673674674ssize_t ksys_readahead(int fd, loff_t offset, size_t count)675675{676676- ssize_t ret;677677- struct fd f;676676+ CLASS(fd, f)(fd);678677679679- ret = -EBADF;680680- f = fdget(fd);681681- if (!fd_file(f) || !(fd_file(f)->f_mode & FMODE_READ))682682- goto out;678678+ if (fd_empty(f) || !(fd_file(f)->f_mode & FMODE_READ))679679+ return -EBADF;683680684681 /*685682 * The readahead() syscall is intended to run only on files686683 * that can execute readahead. If readahead is not possible687684 * on this file, then we must return -EINVAL.688685 */689689- ret = -EINVAL;690686 if (!fd_file(f)->f_mapping || !fd_file(f)->f_mapping->a_ops ||691687 (!S_ISREG(file_inode(fd_file(f))->i_mode) &&692688 !S_ISBLK(file_inode(fd_file(f))->i_mode)))693693- goto out;689689+ return -EINVAL;694690695695- ret = vfs_fadvise(fd_file(f), offset, count, POSIX_FADV_WILLNEED);696696-out:697697- fdput(f);698698- return ret;691691+ return vfs_fadvise(fd_file(f), offset, count, POSIX_FADV_WILLNEED);699692}700693701694SYSCALL_DEFINE3(readahead, int, fd, loff_t, offset, size_t, count)
+4-6
net/core/net_namespace.c
···694694695695struct net *get_net_ns_by_fd(int fd)696696{697697- struct fd f = fdget(fd);698698- struct net *net = ERR_PTR(-EINVAL);697697+ CLASS(fd, f)(fd);699698700700- if (!fd_file(f))699699+ if (fd_empty(f))701700 return ERR_PTR(-EBADF);702701703702 if (proc_ns_file(fd_file(f))) {704703 struct ns_common *ns = get_proc_ns(file_inode(fd_file(f)));705704 if (ns->ops == &netns_operations)706706- net = get_net(container_of(ns, struct net, ns));705705+ return get_net(container_of(ns, struct net, ns));707706 }708708- fdput(f);709707710710- return net;708708+ return ERR_PTR(-EINVAL);711709}712710EXPORT_SYMBOL_GPL(get_net_ns_by_fd);713711#endif
+8-18
security/landlock/syscalls.c
···241241static struct landlock_ruleset *get_ruleset_from_fd(const int fd,242242 const fmode_t mode)243243{244244- struct fd ruleset_f;244244+ CLASS(fd, ruleset_f)(fd);245245 struct landlock_ruleset *ruleset;246246247247- ruleset_f = fdget(fd);248248- if (!fd_file(ruleset_f))247247+ if (fd_empty(ruleset_f))249248 return ERR_PTR(-EBADF);250249251250 /* Checks FD type and access right. */252252- if (fd_file(ruleset_f)->f_op != &ruleset_fops) {253253- ruleset = ERR_PTR(-EBADFD);254254- goto out_fdput;255255- }256256- if (!(fd_file(ruleset_f)->f_mode & mode)) {257257- ruleset = ERR_PTR(-EPERM);258258- goto out_fdput;259259- }251251+ if (fd_file(ruleset_f)->f_op != &ruleset_fops)252252+ return ERR_PTR(-EBADFD);253253+ if (!(fd_file(ruleset_f)->f_mode & mode))254254+ return ERR_PTR(-EPERM);260255 ruleset = fd_file(ruleset_f)->private_data;261261- if (WARN_ON_ONCE(ruleset->num_layers != 1)) {262262- ruleset = ERR_PTR(-EINVAL);263263- goto out_fdput;264264- }256256+ if (WARN_ON_ONCE(ruleset->num_layers != 1))257257+ return ERR_PTR(-EINVAL);265258 landlock_get_ruleset(ruleset);266266-267267-out_fdput:268268- fdput(ruleset_f);269259 return ruleset;270260}271261