It's possible for users to pass file descriptors directly using
FSCONFIG_SET_FD, but the old version only supported the string-based
passing of file descriptors.
Fixes: 5916f439f2eb ("Convert coda to use the new mount API")
Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
---
fs/coda/inode.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/fs/coda/inode.c b/fs/coda/inode.c
index 6898dc621011..df477a7218a2 100644
--- a/fs/coda/inode.c
+++ b/fs/coda/inode.c
@@ -122,21 +122,27 @@ static const struct fs_parameter_spec coda_param_specs[] = {
static int coda_parse_fd(struct fs_context *fc, int fd)
{
struct coda_fs_context *ctx = fc->fs_private;
- struct fd f;
+ struct file *file;
struct inode *inode;
int idx;
- f = fdget(fd);
- if (!f.file)
+ if (param->type == fs_value_is_file) {
+ file = param->file;
+ param->file = NULL;
+ } else {
+ file = fget(result->uint_32);
+ }
+ if (!file)
return -EBADF;
- inode = file_inode(f.file);
+
+ inode = file_inode(file);
if (!S_ISCHR(inode->i_mode) || imajor(inode) != CODA_PSDEV_MAJOR) {
- fdput(f);
+ fput(file);
return invalf(fc, "code: Not coda psdev");
}
idx = iminor(inode);
- fdput(f);
+ fput(file);
if (idx < 0 || idx >= MAX_CODADEVS)
return invalf(fc, "coda: Bad minor number");
--
2.45.2
Hi Aleksa,
kernel test robot noticed the following build errors:
[auto build test ERROR on b80cc4df1124702c600fd43b784e423a30919204]
url: https://github.com/intel-lab-lkp/linux/commits/Aleksa-Sarai/autofs-fix-missing-fput-for-FSCONFIG_SET_FD/20240718-230056
base: b80cc4df1124702c600fd43b784e423a30919204
patch link: https://lore.kernel.org/r/20240719-fsconfig-fsparam_fd-fixes-v1-2-7ccd315c2ad4%40cyphar.com
patch subject: [PATCH 2/2] coda: support FSCONFIG_SET_FD for fd mount flag
config: x86_64-randconfig-161-20240719 (https://download.01.org/0day-ci/archive/20240719/202407190808.l4rcfRij-lkp@intel.com/config)
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240719/202407190808.l4rcfRij-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202407190808.l4rcfRij-lkp@intel.com/
All errors (new ones prefixed by >>):
>> fs/coda/inode.c:129:6: error: use of undeclared identifier 'param'
129 | if (param->type == fs_value_is_file) {
| ^
fs/coda/inode.c:130:10: error: use of undeclared identifier 'param'
130 | file = param->file;
| ^
fs/coda/inode.c:131:3: error: use of undeclared identifier 'param'
131 | param->file = NULL;
| ^
>> fs/coda/inode.c:133:15: error: use of undeclared identifier 'result'
133 | file = fget(result->uint_32);
| ^
4 errors generated.
vim +/param +129 fs/coda/inode.c
121
122 static int coda_parse_fd(struct fs_context *fc, int fd)
123 {
124 struct coda_fs_context *ctx = fc->fs_private;
125 struct file *file;
126 struct inode *inode;
127 int idx;
128
> 129 if (param->type == fs_value_is_file) {
130 file = param->file;
131 param->file = NULL;
132 } else {
> 133 file = fget(result->uint_32);
134 }
135 if (!file)
136 return -EBADF;
137
138 inode = file_inode(file);
139 if (!S_ISCHR(inode->i_mode) || imajor(inode) != CODA_PSDEV_MAJOR) {
140 fput(file);
141 return invalf(fc, "code: Not coda psdev");
142 }
143
144 idx = iminor(inode);
145 fput(file);
146
147 if (idx < 0 || idx >= MAX_CODADEVS)
148 return invalf(fc, "coda: Bad minor number");
149 ctx->idx = idx;
150 return 0;
151 }
152
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Aleksa,
kernel test robot noticed the following build errors:
[auto build test ERROR on b80cc4df1124702c600fd43b784e423a30919204]
url: https://github.com/intel-lab-lkp/linux/commits/Aleksa-Sarai/autofs-fix-missing-fput-for-FSCONFIG_SET_FD/20240718-230056
base: b80cc4df1124702c600fd43b784e423a30919204
patch link: https://lore.kernel.org/r/20240719-fsconfig-fsparam_fd-fixes-v1-2-7ccd315c2ad4%40cyphar.com
patch subject: [PATCH 2/2] coda: support FSCONFIG_SET_FD for fd mount flag
config: arm-randconfig-003-20240719 (https://download.01.org/0day-ci/archive/20240719/202407190741.8fA9KJbt-lkp@intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 14.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240719/202407190741.8fA9KJbt-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202407190741.8fA9KJbt-lkp@intel.com/
All errors (new ones prefixed by >>):
fs/coda/inode.c: In function 'coda_parse_fd':
>> fs/coda/inode.c:129:13: error: 'param' undeclared (first use in this function); did you mean 'parameq'?
129 | if (param->type == fs_value_is_file) {
| ^~~~~
| parameq
fs/coda/inode.c:129:13: note: each undeclared identifier is reported only once for each function it appears in
>> fs/coda/inode.c:133:29: error: 'result' undeclared (first use in this function); did you mean 'mf_result'?
133 | file = fget(result->uint_32);
| ^~~~~~
| mf_result
vim +129 fs/coda/inode.c
121
122 static int coda_parse_fd(struct fs_context *fc, int fd)
123 {
124 struct coda_fs_context *ctx = fc->fs_private;
125 struct file *file;
126 struct inode *inode;
127 int idx;
128
> 129 if (param->type == fs_value_is_file) {
130 file = param->file;
131 param->file = NULL;
132 } else {
> 133 file = fget(result->uint_32);
134 }
135 if (!file)
136 return -EBADF;
137
138 inode = file_inode(file);
139 if (!S_ISCHR(inode->i_mode) || imajor(inode) != CODA_PSDEV_MAJOR) {
140 fput(file);
141 return invalf(fc, "code: Not coda psdev");
142 }
143
144 idx = iminor(inode);
145 fput(file);
146
147 if (idx < 0 || idx >= MAX_CODADEVS)
148 return invalf(fc, "coda: Bad minor number");
149 ctx->idx = idx;
150 return 0;
151 }
152
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
On 2024-07-19, kernel test robot <lkp@intel.com> wrote:
> Hi Aleksa,
>
> kernel test robot noticed the following build errors:
>
> [auto build test ERROR on b80cc4df1124702c600fd43b784e423a30919204]
>
> url: https://github.com/intel-lab-lkp/linux/commits/Aleksa-Sarai/autofs-fix-missing-fput-for-FSCONFIG_SET_FD/20240718-230056
> base: b80cc4df1124702c600fd43b784e423a30919204
> patch link: https://lore.kernel.org/r/20240719-fsconfig-fsparam_fd-fixes-v1-2-7ccd315c2ad4%40cyphar.com
> patch subject: [PATCH 2/2] coda: support FSCONFIG_SET_FD for fd mount flag
> config: arm-randconfig-003-20240719 (https://download.01.org/0day-ci/archive/20240719/202407190741.8fA9KJbt-lkp@intel.com/config)
> compiler: arm-linux-gnueabi-gcc (GCC) 14.1.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240719/202407190741.8fA9KJbt-lkp@intel.com/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202407190741.8fA9KJbt-lkp@intel.com/
>
> All errors (new ones prefixed by >>):
>
> fs/coda/inode.c: In function 'coda_parse_fd':
> >> fs/coda/inode.c:129:13: error: 'param' undeclared (first use in this function); did you mean 'parameq'?
> 129 | if (param->type == fs_value_is_file) {
> | ^~~~~
> | parameq
> fs/coda/inode.c:129:13: note: each undeclared identifier is reported only once for each function it appears in
> >> fs/coda/inode.c:133:29: error: 'result' undeclared (first use in this function); did you mean 'mf_result'?
> 133 | file = fget(result->uint_32);
> | ^~~~~~
> | mf_result
D'oh. I compile tested it but this fs wasn't enabled in my config...
My bad.
> vim +129 fs/coda/inode.c
>
> 121
> 122 static int coda_parse_fd(struct fs_context *fc, int fd)
> 123 {
> 124 struct coda_fs_context *ctx = fc->fs_private;
> 125 struct file *file;
> 126 struct inode *inode;
> 127 int idx;
> 128
> > 129 if (param->type == fs_value_is_file) {
> 130 file = param->file;
> 131 param->file = NULL;
> 132 } else {
> > 133 file = fget(result->uint_32);
> 134 }
> 135 if (!file)
> 136 return -EBADF;
> 137
> 138 inode = file_inode(file);
> 139 if (!S_ISCHR(inode->i_mode) || imajor(inode) != CODA_PSDEV_MAJOR) {
> 140 fput(file);
> 141 return invalf(fc, "code: Not coda psdev");
> 142 }
> 143
> 144 idx = iminor(inode);
> 145 fput(file);
> 146
> 147 if (idx < 0 || idx >= MAX_CODADEVS)
> 148 return invalf(fc, "coda: Bad minor number");
> 149 ctx->idx = idx;
> 150 return 0;
> 151 }
> 152
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki
--
Aleksa Sarai
Senior Software Engineer (Containers)
SUSE Linux GmbH
<https://www.cyphar.com/>
© 2016 - 2025 Red Hat, Inc.