|
Revision tags: v6.15, v6.15-rc7, v6.15-rc6, v6.15-rc5, v6.15-rc4, v6.15-rc3, v6.15-rc2, v6.15-rc1, v6.14, v6.14-rc7, v6.14-rc6, v6.14-rc5, v6.14-rc4, v6.14-rc3, v6.14-rc2, v6.14-rc1, v6.13, v6.13-rc7, v6.13-rc6, v6.13-rc5, v6.13-rc4, v6.13-rc3, v6.13-rc2 |
|
| #
5be1fa8a |
| 08-Dec-2024 |
Al Viro <[email protected]> |
Pass parent directory inode and expected name to ->d_revalidate()
->d_revalidate() often needs to access dentry parent and name; that has to be done carefully, since the locking environment varies f
Pass parent directory inode and expected name to ->d_revalidate()
->d_revalidate() often needs to access dentry parent and name; that has to be done carefully, since the locking environment varies from caller to caller. We are not guaranteed that dentry in question will not be moved right under us - not unless the filesystem is such that nothing on it ever gets renamed.
It can be dealt with, but that results in boilerplate code that isn't even needed - the callers normally have just found the dentry via dcache lookup and want to verify that it's in the right place; they already have the values of ->d_parent and ->d_name stable. There is a couple of exceptions (overlayfs and, to less extent, ecryptfs), but for the majority of calls that song and dance is not needed at all.
It's easier to make ecryptfs and overlayfs find and pass those values if there's a ->d_revalidate() instance to be called, rather than doing that in the instances.
This commit only changes the calling conventions; making use of supplied values is left to followups.
NOTE: some instances need more than just the parent - things like CIFS may need to build an entire path from filesystem root, so they need more precautions than the usual boilerplate. This series doesn't do anything to that need - these filesystems have to keep their locking mechanisms (rename_lock loops, use of dentry_path_raw(), private rwsem a-la v9fs).
One thing to keep in mind when using name is that name->name will normally point into the pathname being resolved; the filename in question occupies name->len bytes starting at name->name, and there is NUL somewhere after it, but it the next byte might very well be '/' rather than '\0'. Do not ignore name->len.
Reviewed-by: Jeff Layton <[email protected]> Reviewed-by: Gabriel Krisman Bertazi <[email protected]> Signed-off-by: Al Viro <[email protected]>
show more ...
|
|
Revision tags: v6.13-rc1, v6.12, v6.12-rc7, v6.12-rc6, v6.12-rc5 |
|
| #
9c738dae |
| 23-Oct-2024 |
Markus Elfring <[email protected]> |
sysctl: Reduce dput(child) calls in proc_sys_fill_cache()
Replace two dput(child) calls with one that occurs immediately before the IS_ERR evaluation. This transformation can be performed because dp
sysctl: Reduce dput(child) calls in proc_sys_fill_cache()
Replace two dput(child) calls with one that occurs immediately before the IS_ERR evaluation. This transformation can be performed because dput() gets called regardless of the value returned by IS_ERR(res).
This issue was transformed by using a script for the semantic patch language like the following. <SmPL> @extended_adjustment@ expression e, f != { mutex_unlock }, x, y; @@ +f(e); if (...) { <+... when != \( e = x \| y(..., &e, ...) \) - f(e); ...+> } -f(e); </SmPL>
Signed-off-by: Markus Elfring <[email protected]> Reviewed-by: Joel Granados <[email protected]> Signed-off-by: Joel Granados <[email protected]>
show more ...
|
|
Revision tags: v6.12-rc4, v6.12-rc3, v6.12-rc2, v6.12-rc1, v6.11, v6.11-rc7, v6.11-rc6, v6.11-rc5, v6.11-rc4, v6.11-rc3, v6.11-rc2, v6.11-rc1, v6.10, v6.10-rc7, v6.10-rc6 |
|
| #
8e666244 |
| 29-Jun-2024 |
Thomas Weißschuh <[email protected]> |
sysctl: Convert locking comments to lockdep assertions
The assertions work as well as the comment to inform developers about locking expectations. Additionally they are validated by lockdep at runti
sysctl: Convert locking comments to lockdep assertions
The assertions work as well as the comment to inform developers about locking expectations. Additionally they are validated by lockdep at runtime, making sure the expectations are met.
Signed-off-by: Thomas Weißschuh <[email protected]> Signed-off-by: Joel Granados <[email protected]>
show more ...
|
| #
fbc26ee7 |
| 05-Aug-2024 |
Thomas Weißschuh <[email protected]> |
sysctl: make internal ctl_tables const
Now that the sysctl core can handle registration of "const struct ctl_table" constify the sysctl internal tables.
Signed-off-by: Thomas Weißschuh <linux@weiss
sysctl: make internal ctl_tables const
Now that the sysctl core can handle registration of "const struct ctl_table" constify the sysctl internal tables.
Signed-off-by: Thomas Weißschuh <[email protected]> Signed-off-by: Joel Granados <[email protected]>
show more ...
|
| #
7abc9b53 |
| 05-Aug-2024 |
Thomas Weißschuh <[email protected]> |
sysctl: allow registration of const struct ctl_table
Putting structure, especially those containing function pointers, into read-only memory makes the safer and easier to reason about. Change the sy
sysctl: allow registration of const struct ctl_table
Putting structure, especially those containing function pointers, into read-only memory makes the safer and easier to reason about. Change the sysctl registration APIs to allow registration of "const struct ctl_table".
Signed-off-by: Thomas Weißschuh <[email protected]> Acked-by: Kees Cook <[email protected]> Reviewed-by: Kees Cook <[email protected]> # security/* Signed-off-by: Joel Granados <[email protected]>
show more ...
|
| #
29e1095b |
| 05-Aug-2024 |
Thomas Weißschuh <[email protected]> |
sysctl: move internal interfaces to const struct ctl_table
As a preparation to make all the core sysctl code work with const struct ctl_table switch over the internal function to use the const varia
sysctl: move internal interfaces to const struct ctl_table
As a preparation to make all the core sysctl code work with const struct ctl_table switch over the internal function to use the const variant.
Some pointers to "struct ctl_table" need to stay non-const as they are newly allocated and modified before registration.
Signed-off-by: Thomas Weißschuh <[email protected]> Signed-off-by: Joel Granados <[email protected]>
show more ...
|
| #
559d4c6a |
| 05-Aug-2024 |
Thomas Weißschuh <[email protected]> |
sysctl: avoid spurious permanent empty tables
The test if a table is a permanently empty one, inspects the address of the registered ctl_table argument. However as sysctl_mount_point is an empty arr
sysctl: avoid spurious permanent empty tables
The test if a table is a permanently empty one, inspects the address of the registered ctl_table argument. However as sysctl_mount_point is an empty array and does not occupy and space it can end up sharing an address with another object in memory. If that other object itself is a "struct ctl_table" then registering that table will fail as it's incorrectly recognized as permanently empty.
Avoid this issue by adding a dummy element to the array so that is not empty anymore. Explicitly register the table with zero elements as otherwise the dummy element would be recognized as a sentinel element which would lead to a runtime warning from the sysctl core.
While the issue seems not being encountered at this time, this seems mostly to be due to luck. Also a future change, constifying sysctl_mount_point and root_table, can reliably trigger this issue on clang 18.
Given that empty arrays are non-standard in the first place it seems prudent to avoid them if possible.
Fixes: 4a7b29f65094 ("sysctl: move sysctl type to ctl_table_header") Fixes: a35dd3a786f5 ("sysctl: drop now unnecessary out-of-bounds check") Cc: [email protected] Signed-off-by: Thomas Weißschuh <[email protected]> Closes: https://lore.kernel.org/oe-lkp/[email protected] Signed-off-by: Joel Granados <[email protected]>
show more ...
|
|
Revision tags: v6.10-rc5, v6.10-rc4, v6.10-rc3 |
|
| #
acc15469 |
| 04-Jun-2024 |
Joel Granados <[email protected]> |
sysctl: Warn on an empty procname element
Add a pr_err warning in case a ctl_table is registered with a sentinel element containing a NULL procname.
Signed-off-by: Joel Granados <j.granados@samsung
sysctl: Warn on an empty procname element
Add a pr_err warning in case a ctl_table is registered with a sentinel element containing a NULL procname.
Signed-off-by: Joel Granados <[email protected]>
show more ...
|
| #
37175403 |
| 04-Jun-2024 |
Joel Granados <[email protected]> |
sysctl: Remove ctl_table sentinel code comments
Remove the mention of a "zero terminated entry" from the __register_sysctl_table function doc.
Signed-off-by: Joel Granados <[email protected]>
|
| #
a02fe70d |
| 04-Jun-2024 |
Joel Granados <[email protected]> |
sysctl: Remove "child" sysctl code comments
Erase the code comments mentioning "child" that were forgotten when the child element was removed in commit 2f2665c13af48 ("sysctl: replace child with an
sysctl: Remove "child" sysctl code comments
Erase the code comments mentioning "child" that were forgotten when the child element was removed in commit 2f2665c13af48 ("sysctl: replace child with an enumeration").
Signed-off-by: Joel Granados <[email protected]>
show more ...
|
| #
aef9d25e |
| 04-Jun-2024 |
Joel Granados <[email protected]> |
sysctl: Remove superfluous empty allocations from sysctl internals
Now that the sentinels have been removed from ctl_table arrays, there is no need to artificially append empty ctl_table elements at
sysctl: Remove superfluous empty allocations from sysctl internals
Now that the sentinels have been removed from ctl_table arrays, there is no need to artificially append empty ctl_table elements at ctl_table registration. Remove superfluous empty allocation from new_dir and new_links.
Signed-off-by: Joel Granados <[email protected]>
show more ...
|
| #
55bb7eb6 |
| 04-Jun-2024 |
Joel Granados <[email protected]> |
sysctl: Replace nr_entries with ctl_table_size in new_links
The number of ctl_table entries (nr_entries) calculation was previously based on the ctl_table_size and the sentinel element. Since the se
sysctl: Replace nr_entries with ctl_table_size in new_links
The number of ctl_table entries (nr_entries) calculation was previously based on the ctl_table_size and the sentinel element. Since the sentinels have been removed, we remove the calculation and just use the ctl_table_size from the ctl_table_header.
Signed-off-by: Joel Granados <[email protected]>
show more ...
|
| #
d7a76ec8 |
| 04-Jun-2024 |
Joel Granados <[email protected]> |
sysctl: Remove check for sentinel element in ctl_table arrays
Use ARRAY_SIZE exclusively by removing the check to ->procname in the stopping criteria of the loops traversing ctl_table arrays. This c
sysctl: Remove check for sentinel element in ctl_table arrays
Use ARRAY_SIZE exclusively by removing the check to ->procname in the stopping criteria of the loops traversing ctl_table arrays. This commit finalizes the removal of the sentinel elements at the end of ctl_table arrays which reduces the build time size and run time memory bloat by ~64 bytes per sentinel (further information Link : https://lore.kernel.org/all/ZO5Yx5JFogGi%[email protected]/)
Remove the entry->procname evaluation from the for loop stopping criteria in sysctl and sysctl_net.
Signed-off-by: Joel Granados <[email protected]>
show more ...
|
|
Revision tags: v6.10-rc2, v6.10-rc1, v6.9, v6.9-rc7, v6.9-rc6, v6.9-rc5 |
|
| #
b5ffbd13 |
| 19-Apr-2024 |
Wen Yang <[email protected]> |
sysctl: move the extra1/2 boundary check of u8 to sysctl_check_table_array
Move boundary checking for proc_dou8ved_minmax into module loading, thereby reporting errors in advance. And add a kunit te
sysctl: move the extra1/2 boundary check of u8 to sysctl_check_table_array
Move boundary checking for proc_dou8ved_minmax into module loading, thereby reporting errors in advance. And add a kunit test case ensuring the boundary check is done correctly.
The boundary check in proc_dou8vec_minmax done to the extra elements in the ctl_table struct is currently performed at runtime. This allows buggy kernel modules to be loaded normally without any errors only to fail when used.
This is a buggy example module: #include <linux/kernel.h> #include <linux/module.h> #include <linux/sysctl.h>
static struct ctl_table_header *_table_header = NULL; static unsigned char _data = 0; struct ctl_table table[] = { { .procname = "foo", .data = &_data, .maxlen = sizeof(u8), .mode = 0644, .proc_handler = proc_dou8vec_minmax, .extra1 = SYSCTL_ZERO, .extra2 = SYSCTL_ONE_THOUSAND, }, };
static int init_demo(void) { _table_header = register_sysctl("kernel", table); if (!_table_header) return -ENOMEM;
return 0; }
module_init(init_demo); MODULE_LICENSE("GPL");
And this is the result: # insmod test.ko # cat /proc/sys/kernel/foo cat: /proc/sys/kernel/foo: Invalid argument
Suggested-by: Joel Granados <[email protected]> Signed-off-by: Wen Yang <[email protected]> Cc: Luis Chamberlain <[email protected]> Cc: Kees Cook <[email protected]> Cc: Joel Granados <[email protected]> Cc: Eric W. Biederman <[email protected]> Cc: Christian Brauner <[email protected]> Cc: [email protected] Reviewed-by: Joel Granados <[email protected]> Signed-off-by: Joel Granados <[email protected]>
show more ...
|
|
Revision tags: v6.9-rc4, v6.9-rc3 |
|
| #
98ca62ba |
| 02-Apr-2024 |
Thomas Weißschuh <[email protected]> |
sysctl: always initialize i_uid/i_gid
Always initialize i_uid/i_gid inside the sysfs core so set_ownership() can safely skip setting them.
Commit 5ec27ec735ba ("fs/proc/proc_sysctl.c: fix the defau
sysctl: always initialize i_uid/i_gid
Always initialize i_uid/i_gid inside the sysfs core so set_ownership() can safely skip setting them.
Commit 5ec27ec735ba ("fs/proc/proc_sysctl.c: fix the default values of i_uid/i_gid on /proc/sys inodes.") added defaults for i_uid/i_gid when set_ownership() was not implemented. It also missed adjusting net_ctl_set_ownership() to use the same default values in case the computation of a better value failed.
Fixes: 5ec27ec735ba ("fs/proc/proc_sysctl.c: fix the default values of i_uid/i_gid on /proc/sys inodes.") Cc: [email protected] Signed-off-by: Thomas Weißschuh <[email protected]> Signed-off-by: Joel Granados <[email protected]>
show more ...
|
|
Revision tags: v6.9-rc2, v6.9-rc1 |
|
| #
a35dd3a7 |
| 22-Mar-2024 |
Thomas Weißschuh <[email protected]> |
sysctl: drop now unnecessary out-of-bounds check
Remove the now unneeded check for ctl_table_size; it is safe to do so as sysctl_set_perm_empty_ctl_header() does not access the ctl_table member anym
sysctl: drop now unnecessary out-of-bounds check
Remove the now unneeded check for ctl_table_size; it is safe to do so as sysctl_set_perm_empty_ctl_header() does not access the ctl_table member anymore.
This also makes the element of sysctl_mount_point unnecessary, so drop it at the same time.
Signed-off-by: Thomas Weißschuh <[email protected]> Signed-off-by: Joel Granados <[email protected]>
show more ...
|
| #
4a7b29f6 |
| 22-Mar-2024 |
Thomas Weißschuh <[email protected]> |
sysctl: move sysctl type to ctl_table_header
Move the SYSCTL_TABLE_TYPE_{DEFAULT,PERMANENTLY_EMPTY} enums from ctl_table to ctl_table_header. Removing the mutable member is necessary to constify sta
sysctl: move sysctl type to ctl_table_header
Move the SYSCTL_TABLE_TYPE_{DEFAULT,PERMANENTLY_EMPTY} enums from ctl_table to ctl_table_header. Removing the mutable member is necessary to constify static instances of struct ctl_table.
Move the initialization of the sysctl_mount_point type into init_header() where all the other header fields are also initialized.
As a side-effect the memory usage of the sysctl core is reduced. Each ctl_table_header instance can manage multiple ctl_table instances and is only allocated when the table is actually registered. This saves 8 bytes of memory per ctl_table on 64bit, 4 due to the enum field itself and 4 due to padding.
Signed-off-by: Thomas Weißschuh <[email protected]> Signed-off-by: Joel Granados <[email protected]>
show more ...
|
| #
eb32d3ad |
| 22-Mar-2024 |
Thomas Weißschuh <[email protected]> |
sysctl: drop sysctl_is_perm_empty_ctl_table
It is used only twice and those callers are simpler with sysctl_is_perm_empty_ctl_header(). So use this sibling function.
This is part of an effort to co
sysctl: drop sysctl_is_perm_empty_ctl_table
It is used only twice and those callers are simpler with sysctl_is_perm_empty_ctl_header(). So use this sibling function.
This is part of an effort to constify definition of struct ctl_table. For this effort the mutable member 'type' is moved from struct ctl_table to struct ctl_table_header. Unifying the macros sysctl_is_perm_empty_ctl_* makes this easier.
Signed-off-by: Thomas Weißschuh <[email protected]> Signed-off-by: Joel Granados <[email protected]>
show more ...
|
| #
520713a9 |
| 15-Mar-2024 |
Thomas Weißschuh <[email protected]> |
sysctl: treewide: drop unused argument ctl_table_root::set_ownership(table)
Remove the 'table' argument from set_ownership as it is never used. This change is a step towards putting "struct ctl_tabl
sysctl: treewide: drop unused argument ctl_table_root::set_ownership(table)
Remove the 'table' argument from set_ownership as it is never used. This change is a step towards putting "struct ctl_table" into .rodata and eventually having sysctl core only use "const struct ctl_table".
The patch was created with the following coccinelle script:
@@ identifier func, head, table, uid, gid; @@
void func( struct ctl_table_header *head, - struct ctl_table *table, kuid_t *uid, kgid_t *gid) { ... }
No additional occurrences of 'set_ownership' were found after doing a tree-wide search.
Reviewed-by: Joel Granados <[email protected]> Signed-off-by: Thomas Weißschuh <[email protected]> Signed-off-by: Joel Granados <[email protected]>
show more ...
|
|
Revision tags: v6.8, v6.8-rc7, v6.8-rc6, v6.8-rc5, v6.8-rc4, v6.8-rc3, v6.8-rc2, v6.8-rc1, v6.7, v6.7-rc8, v6.7-rc7, v6.7-rc6, v6.7-rc5, v6.7-rc4, v6.7-rc3 |
|
| #
9d5b9475 |
| 21-Nov-2023 |
Joel Granados <[email protected]> |
fs: Remove the now superfluous sentinel elements from ctl_table array
This commit comes at the tail end of a greater effort to remove the empty elements at the end of the ctl_table arrays (sentinels
fs: Remove the now superfluous sentinel elements from ctl_table array
This commit comes at the tail end of a greater effort to remove the empty elements at the end of the ctl_table arrays (sentinels) which will reduce the overall build time size of the kernel and run time memory bloat by ~64 bytes per sentinel (further information Link : https://lore.kernel.org/all/ZO5Yx5JFogGi%[email protected]/)
Remove sentinel elements ctl_table struct. Special attention was placed in making sure that an empty directory for fs/verity was created when CONFIG_FS_VERITY_BUILTIN_SIGNATURES is not defined. In this case we use the register sysctl call that expects a size.
Signed-off-by: Joel Granados <[email protected]> Reviewed-by: Jan Kara <[email protected]> Reviewed-by: "Darrick J. Wong" <[email protected]> Acked-by: Christian Brauner <[email protected]> Signed-off-by: Luis Chamberlain <[email protected]>
show more ...
|
| #
31555231 |
| 21-Nov-2023 |
Joel Granados <[email protected]> |
sysctl: Fix out of bounds access for empty sysctl registers
When registering tables to the sysctl subsystem there is a check to see if header is a permanently empty directory (used for mounts). This
sysctl: Fix out of bounds access for empty sysctl registers
When registering tables to the sysctl subsystem there is a check to see if header is a permanently empty directory (used for mounts). This check evaluates the first element of the ctl_table. This results in an out of bounds evaluation when registering empty directories.
The function register_sysctl_mount_point now passes a ctl_table of size 1 instead of size 0. It now relies solely on the type to identify a permanently empty register.
Make sure that the ctl_table has at least one element before testing for permanent emptiness.
Signed-off-by: Joel Granados <[email protected]> Reported-by: kernel test robot <[email protected]> Closes: https://lore.kernel.org/oe-lkp/[email protected] Signed-off-by: Luis Chamberlain <[email protected]>
show more ...
|
|
Revision tags: v6.7-rc2, v6.7-rc1 |
|
| #
1eae9a47 |
| 11-Nov-2023 |
Al Viro <[email protected]> |
/proc/sys: use d_splice_alias() calling conventions to simplify failure exits
Signed-off-by: Al Viro <[email protected]>
|
|
Revision tags: v6.6 |
|
| #
8b793bcd |
| 27-Oct-2023 |
Krister Johansen <[email protected]> |
watchdog: move softlockup_panic back to early_param
Setting softlockup_panic from do_sysctl_args() causes it to take effect later in boot. The lockup detector is enabled before SMP is brought onlin
watchdog: move softlockup_panic back to early_param
Setting softlockup_panic from do_sysctl_args() causes it to take effect later in boot. The lockup detector is enabled before SMP is brought online, but do_sysctl_args runs afterwards. If a user wants to set softlockup_panic on boot and have it trigger should a softlockup occur during onlining of the non-boot processors, they could do this prior to commit f117955a2255 ("kernel/watchdog.c: convert {soft/hard}lockup boot parameters to sysctl aliases"). However, after this commit the value of softlockup_panic is set too late to be of help for this type of problem. Restore the prior behavior.
Signed-off-by: Krister Johansen <[email protected]> Cc: [email protected] Fixes: f117955a2255 ("kernel/watchdog.c: convert {soft/hard}lockup boot parameters to sysctl aliases") Signed-off-by: Luis Chamberlain <[email protected]>
show more ...
|
| #
8001f493 |
| 27-Oct-2023 |
Krister Johansen <[email protected]> |
proc: sysctl: prevent aliased sysctls from getting passed to init
The code that checks for unknown boot options is unaware of the sysctl alias facility, which maps bootparams to sysctl values. If a
proc: sysctl: prevent aliased sysctls from getting passed to init
The code that checks for unknown boot options is unaware of the sysctl alias facility, which maps bootparams to sysctl values. If a user sets an old value that has a valid alias, a message about an invalid parameter will be printed during boot, and the parameter will get passed to init. Fix by checking for the existence of aliased parameters in the unknown boot parameter code. If an alias exists, don't return an error or pass the value to init.
Signed-off-by: Krister Johansen <[email protected]> Cc: [email protected] Fixes: 0a477e1ae21b ("kernel/sysctl: support handling command line aliases") Signed-off-by: Luis Chamberlain <[email protected]>
show more ...
|
|
Revision tags: v6.6-rc7, v6.6-rc6, v6.6-rc5 |
|
| #
200d9421 |
| 04-Oct-2023 |
Jeff Layton <[email protected]> |
proc: convert to new timestamp accessors
Convert to using the new inode timestamp accessor functions.
Signed-off-by: Jeff Layton <[email protected]> Link: https://lore.kernel.org/r/20231004185347.
proc: convert to new timestamp accessors
Convert to using the new inode timestamp accessor functions.
Signed-off-by: Jeff Layton <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Christian Brauner <[email protected]>
show more ...
|