* [amir73il:vfs-6.19.ovl 43/57] fs/overlayfs/dir.c:599:27: error: incompatible pointer types passing 'const struct cred *(const struct cred *)' to parameter of type 'struct cred *'
@ 2025-11-20 9:01 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2025-11-20 9:01 UTC (permalink / raw)
To: Amir Goldstein; +Cc: oe-kbuild-all
tree: https://github.com/amir73il/linux vfs-6.19.ovl
head: dd93300969b6b87e330947921579bb32d6b02cc1
commit: ff652575590b634a780d46e6500e88f4e162f7db [43/57] ovl: add ovl_override_creator_creds cred guard
config: hexagon-randconfig-6002-20251120 (https://download.01.org/0day-ci/archive/20251120/202511201634.e38SpSUL-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 9e9fe08b16ea2c4d9867fb4974edf2a3776d6ece)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251120/202511201634.e38SpSUL-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/202511201634.e38SpSUL-lkp@intel.com/
All errors (new ones prefixed by >>):
| ^
<scratch space>:87:1: note: expanded from here
87 | class_override_creds_destructor
| ^
fs/overlayfs/overlayfs.h:459:1: note: did you mean 'class_override_creds_ovl_destructor'?
include/linux/cleanup.h:285:3: note: expanded from macro 'EXTEND_CLASS'
285 | { class_##_name##_destructor(p); } \
| ^
<scratch space>:87:1: note: expanded from here
87 | class_override_creds_destructor
| ^
fs/overlayfs/overlayfs.h:459:1: note: 'class_override_creds_ovl_destructor' declared here
include/linux/cleanup.h:284:20: note: expanded from macro 'EXTEND_CLASS'
284 | static inline void class_##_name##ext##_destructor(class_##_name##_t *p)\
| ^
<scratch space>:83:1: note: expanded from here
83 | class_override_creds_ovl_destructor
| ^
In file included from fs/overlayfs/dir.c:18:
fs/overlayfs/overlayfs.h:459:1: error: unknown type name 'class_override_creds_t'
459 | EXTEND_CLASS(override_creds, _ovl, ovl_override_creds(sb), struct super_block *sb)
| ^
include/linux/cleanup.h:286:15: note: expanded from macro 'EXTEND_CLASS'
286 | static inline class_##_name##_t class_##_name##ext##_constructor(_init_args) \
| ^
<scratch space>:89:1: note: expanded from here
89 | class_override_creds_t
| ^
In file included from fs/overlayfs/dir.c:18:
fs/overlayfs/overlayfs.h:459:1: error: unknown type name 'class_override_creds_t'; did you mean 'class_override_creds_ovl_t'?
include/linux/cleanup.h:287:3: note: expanded from macro 'EXTEND_CLASS'
287 | { class_##_name##_t t = _init; return t; }
| ^
<scratch space>:94:1: note: expanded from here
94 | class_override_creds_t
| ^
fs/overlayfs/overlayfs.h:459:1: note: 'class_override_creds_ovl_t' declared here
include/linux/cleanup.h:283:27: note: expanded from macro 'EXTEND_CLASS'
283 | typedef class_##_name##_t class_##_name##ext##_t; \
| ^
<scratch space>:80:1: note: expanded from here
80 | class_override_creds_ovl_t
| ^
In file included from fs/overlayfs/dir.c:18:
fs/overlayfs/overlayfs.h:459:1: error: incompatible pointer to integer conversion initializing 'class_override_creds_ovl_t' (aka 'int') with an expression of type 'const struct cred *' [-Wint-conversion]
459 | EXTEND_CLASS(override_creds, _ovl, ovl_override_creds(sb), struct super_block *sb)
| ^ ~~~~~~~~~~~~~~~~~~~~~~
include/linux/cleanup.h:287:21: note: expanded from macro 'EXTEND_CLASS'
287 | { class_##_name##_t t = _init; return t; }
| ^ ~~~~~
fs/overlayfs/dir.c:591:2: error: use of undeclared identifier 'class_prepare_creds_t'
591 | CLASS(prepare_creds, override_cred)();
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/cleanup.h:290:2: note: expanded from macro 'CLASS'
290 | class_##_name##_t var __cleanup(class_##_name##_destructor) = \
| ^~~~~~~~~~~~~~~~~
<scratch space>:145:1: note: expanded from here
145 | class_prepare_creds_t
| ^~~~~~~~~~~~~~~~~~~~~
fs/overlayfs/dir.c:592:7: error: use of undeclared identifier 'override_cred'; did you mean 'override_creds'?
592 | if (!override_cred)
| ^~~~~~~~~~~~~
| override_creds
include/linux/cred.h:173:34: note: 'override_creds' declared here
173 | static inline const struct cred *override_creds(const struct cred *override_cred)
| ^
fs/overlayfs/dir.c:592:7: warning: address of function 'override_creds' will always evaluate to 'true' [-Wpointer-bool-conversion]
592 | if (!override_cred)
| ~^~~~~~~~~~~~~
fs/overlayfs/dir.c:592:7: note: prefix with the address-of operator to silence this warning
592 | if (!override_cred)
| ^
| &
fs/overlayfs/dir.c:595:2: error: use of undeclared identifier 'override_cred'; did you mean 'override_creds'?
595 | override_cred->fsuid = inode->i_uid;
| ^~~~~~~~~~~~~
| override_creds
include/linux/cred.h:173:34: note: 'override_creds' declared here
173 | static inline const struct cred *override_creds(const struct cred *override_cred)
| ^
fs/overlayfs/dir.c:595:15: error: member reference base type 'const struct cred *(const struct cred *)' is not a structure or union
595 | override_cred->fsuid = inode->i_uid;
| ~~~~~~~~~~~~~^ ~~~~~
fs/overlayfs/dir.c:596:2: error: use of undeclared identifier 'override_cred'; did you mean 'override_creds'?
596 | override_cred->fsgid = inode->i_gid;
| ^~~~~~~~~~~~~
| override_creds
include/linux/cred.h:173:34: note: 'override_creds' declared here
173 | static inline const struct cred *override_creds(const struct cred *override_cred)
| ^
fs/overlayfs/dir.c:596:15: error: member reference base type 'const struct cred *(const struct cred *)' is not a structure or union
596 | override_cred->fsgid = inode->i_gid;
| ~~~~~~~~~~~~~^ ~~~~~
fs/overlayfs/dir.c:599:27: error: use of undeclared identifier 'override_cred'; did you mean 'override_creds'?
599 | current->cred, override_cred);
| ^~~~~~~~~~~~~
| override_creds
include/linux/cred.h:173:34: note: 'override_creds' declared here
173 | static inline const struct cred *override_creds(const struct cred *override_cred)
| ^
>> fs/overlayfs/dir.c:599:27: error: incompatible pointer types passing 'const struct cred *(const struct cred *)' to parameter of type 'struct cred *' [-Wincompatible-pointer-types]
599 | current->cred, override_cred);
| ^~~~~~~~~~~~~
include/linux/security.h:877:22: note: passing argument to parameter 'new' here
877 | struct cred *new)
| ^
fs/overlayfs/dir.c:603:36: error: use of undeclared identifier 'override_cred'; did you mean 'override_creds'?
603 | return override_creds(no_free_ptr(override_cred));
| ^~~~~~~~~~~~~
| override_creds
include/linux/cleanup.h:228:11: note: expanded from macro 'no_free_ptr'
228 | ((typeof(p)) __must_check_fn((__force const volatile void *)__get_and_null(p, NULL)))
| ^
include/linux/cred.h:173:34: note: 'override_creds' declared here
173 | static inline const struct cred *override_creds(const struct cred *override_cred)
| ^
fs/overlayfs/dir.c:603:36: error: use of undeclared identifier 'override_cred'; did you mean 'override_creds'?
603 | return override_creds(no_free_ptr(override_cred));
| ^~~~~~~~~~~~~
| override_creds
include/linux/cleanup.h:228:77: note: expanded from macro 'no_free_ptr'
228 | ((typeof(p)) __must_check_fn((__force const volatile void *)__get_and_null(p, NULL)))
| ^
include/linux/cleanup.h:217:25: note: expanded from macro '__get_and_null'
217 | __auto_type __ptr = &(p); \
| ^
include/linux/cred.h:173:34: note: 'override_creds' declared here
173 | static inline const struct cred *override_creds(const struct cred *override_cred)
| ^
fs/overlayfs/dir.c:603:24: error: non-object type 'const struct cred *(const struct cred *)' is not assignable
603 | return override_creds(no_free_ptr(override_cred));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/cleanup.h:228:62: note: expanded from macro 'no_free_ptr'
228 | ((typeof(p)) __must_check_fn((__force const volatile void *)__get_and_null(p, NULL)))
| ^~~~~~~~~~~~~~~~~~~~~~~
include/linux/cleanup.h:219:10: note: expanded from macro '__get_and_null'
219 | *__ptr = nullvalue; \
| ~~~~~~ ^
fs/overlayfs/dir.c:603:24: error: used type 'typeof (override_creds)' (aka 'const struct cred *(const struct cred *)') where arithmetic or pointer type is required
603 | return override_creds(no_free_ptr(override_cred));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/cleanup.h:228:3: note: expanded from macro 'no_free_ptr'
228 | ((typeof(p)) __must_check_fn((__force const volatile void *)__get_and_null(p, NULL)))
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/overlayfs/dir.c:660:2: error: 'cleanup' argument is not a function
660 | scoped_class(override_creds_ovl, old_cred, dentry->d_sb) {
| ^
include/linux/cleanup.h:294:7: note: expanded from macro 'scoped_class'
294 | for (CLASS(_name, var)(args); \
| ^
include/linux/cleanup.h:290:34: note: expanded from macro 'CLASS'
290 | class_##_name##_t var __cleanup(class_##_name##_destructor) = \
| ^
<scratch space>:162:1: note: expanded from here
162 | class_override_creds_ovl_destructor
| ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
1 warning and 20 errors generated.
Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for OF_GPIO
Depends on [n]: GPIOLIB [=y] && OF [=n] && HAS_IOMEM [=y]
Selected by [y]:
- GPIO_TB10X [=y] && GPIOLIB [=y] && HAS_IOMEM [=y] && (ARC_PLAT_TB10X || COMPILE_TEST [=y])
WARNING: unmet direct dependencies detected for MFD_STMFX
Depends on [n]: HAS_IOMEM [=y] && I2C [=y] && OF [=n]
Selected by [y]:
- PINCTRL_STMFX [=y] && PINCTRL [=y] && I2C [=y] && OF_GPIO [=y] && HAS_IOMEM [=y]
WARNING: unmet direct dependencies detected for GPIO_SYSCON
Depends on [n]: GPIOLIB [=y] && HAS_IOMEM [=y] && MFD_SYSCON [=y] && OF [=n]
Selected by [y]:
- GPIO_SAMA5D2_PIOBU [=y] && GPIOLIB [=y] && HAS_IOMEM [=y] && MFD_SYSCON [=y] && OF_GPIO [=y] && (ARCH_AT91 || COMPILE_TEST [=y])
vim +599 fs/overlayfs/dir.c
583
584 static const struct cred *ovl_override_creator_creds(struct dentry *dentry, struct inode *inode, umode_t mode)
585 {
586 int err;
587
588 if (WARN_ON_ONCE(current->cred != ovl_creds(dentry->d_sb)))
589 return ERR_PTR(-EINVAL);
590
591 CLASS(prepare_creds, override_cred)();
592 if (!override_cred)
593 return ERR_PTR(-ENOMEM);
594
595 override_cred->fsuid = inode->i_uid;
596 override_cred->fsgid = inode->i_gid;
597
598 err = security_dentry_create_files_as(dentry, mode, &dentry->d_name,
> 599 current->cred, override_cred);
600 if (err)
601 return ERR_PTR(err);
602
603 return override_creds(no_free_ptr(override_cred));
604 }
605
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2025-11-20 9:01 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-20 9:01 [amir73il:vfs-6.19.ovl 43/57] fs/overlayfs/dir.c:599:27: error: incompatible pointer types passing 'const struct cred *(const struct cred *)' to parameter of type 'struct cred *' kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.