Sparse warnings are incurred by key_fs[ug]id_changed() due to unprotected accesses of tsk->cred, which is marked __rcu. Fix this by passing the new cred struct to these functions from commit_creds() rather than the task pointer.
Showing the changes to include/linux (1 of 3 files). Show all
Unified · Split
| @@ -402,8 +402,8 @@ extern struct ctl_table key_sysctls[]; · 401 unmodified lines | |||
| 402 | * the userspace interface | 402 | * the userspace interface |
| 403 | */ | 403 | */ |
| 404 | extern int install_thread_keyring_to_cred(struct cred *cred); | 404 | extern int install_thread_keyring_to_cred(struct cred *cred); |
| 405 | extern void key_fsuid_changed(struct task_struct *tsk); | 405 | extern void key_fsuid_changed(struct cred *new_cred); |
| 406 | extern void key_fsgid_changed(struct task_struct *tsk); | 406 | extern void key_fsgid_changed(struct cred *new_cred); |
| 407 | extern void key_init(void); | 407 | extern void key_init(void); |
| 408 | 408 | ||
| 409 | #else /* CONFIG_KEYS */ | 409 | #else /* CONFIG_KEYS */ |
| @@ -418,8 +418,8 @@ extern void key_init(void); · 8 unmodified lines | |||
| 418 | #define make_key_ref(k, p) NULL | 418 | #define make_key_ref(k, p) NULL |
| 419 | #define key_ref_to_ptr(k) NULL | 419 | #define key_ref_to_ptr(k) NULL |
| 420 | #define is_key_possessed(k) 0 | 420 | #define is_key_possessed(k) 0 |
| 421 | #define key_fsuid_changed(t) do { } while(0) | 421 | #define key_fsuid_changed(c) do { } while(0) |
| 422 | #define key_fsgid_changed(t) do { } while(0) | 422 | #define key_fsgid_changed(c) do { } while(0) |
| 423 | #define key_init() do { } while(0) | 423 | #define key_init() do { } while(0) |
| 424 | 424 | ||
| 425 | #endif /* CONFIG_KEYS */ | 425 | #endif /* CONFIG_KEYS */ |