diff options
| author | Linus Torvalds <[email protected]> | 2024-07-16 14:24:29 -0700 | 
|---|---|---|
| committer | Linus Torvalds <[email protected]> | 2024-07-16 14:24:29 -0700 | 
| commit | f8a8b94d0698ccc56c44478169c91ca774540d9f (patch) | |
| tree | 52a4e190be79653c2320fc71f535be0013d6a110 /kernel/sysctl.c | |
| parent | ce5a51bfacf7a2953f8fa309a8fc8540c2e288da (diff) | |
| parent | acc154691fc75e1a178fc36624bdeee1420585a4 (diff) | |
Merge tag 'sysctl-6.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/sysctl/sysctl
Pull sysctl updates from Joel Granados:
 - Remove "->procname == NULL" check when iterating through sysctl table
   arrays
   Removing sentinels in ctl_table arrays reduces the build time size
   and runtime memory consumed by ~64 bytes per array. With all
   ctl_table sentinels gone, the additional check for ->procname == NULL
   that worked in tandem with the ARRAY_SIZE to calculate the size of
   the ctl_table arrays is no longer needed and has been removed. The
   sysctl register functions now returns an error if a sentinel is used.
 - Preparation patches for sysctl constification
   Constifying ctl_table structs prevents the modification of
   proc_handler function pointers as they would reside in .rodata. The
   ctl_table arguments in sysctl utility functions are const qualified
   in preparation for a future treewide proc_handler argument
   constification commit.
 - Misc fixes
   Increase robustness of set_ownership by providing sane default
   ownership values in case the callee doesn't set them. Bound check
   proc_dou8vec_minmax to avoid loading buggy modules and give sysctl
   testing module a name to avoid compiler complaints.
* tag 'sysctl-6.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/sysctl/sysctl:
  sysctl: Warn on an empty procname element
  sysctl: Remove ctl_table sentinel code comments
  sysctl: Remove "child" sysctl code comments
  sysctl: Remove superfluous empty allocations from sysctl internals
  sysctl: Replace nr_entries with ctl_table_size in new_links
  sysctl: Remove check for sentinel element in ctl_table arrays
  mm profiling: Remove superfluous sentinel element from ctl_table
  locking: Remove superfluous sentinel element from kern_lockdep_table
  sysctl: Add module description to sysctl-testing
  sysctl: constify ctl_table arguments of utility function
  utsname: constify ctl_table arguments of utility function
  sysctl: move the extra1/2 boundary check of u8 to sysctl_check_table_array
  sysctl: always initialize i_uid/i_gid
Diffstat (limited to 'kernel/sysctl.c')
| -rw-r--r-- | kernel/sysctl.c | 31 | 
1 files changed, 13 insertions, 18 deletions
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index e0b917328cf9..e4421594fc25 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -205,7 +205,7 @@ static int _proc_do_string(char *data, int maxlen, int write,  	return 0;  } -static void warn_sysctl_write(struct ctl_table *table) +static void warn_sysctl_write(const struct ctl_table *table)  {  	pr_warn_once("%s wrote to %s when file position was not 0!\n"  		"This will not be supported in the future. To silence this\n" @@ -223,7 +223,7 @@ static void warn_sysctl_write(struct ctl_table *table)   * handlers can ignore the return value.   */  static bool proc_first_pos_non_zero_ignore(loff_t *ppos, -					   struct ctl_table *table) +					   const struct ctl_table *table)  {  	if (!*ppos)  		return false; @@ -468,7 +468,7 @@ static int do_proc_douintvec_conv(unsigned long *lvalp,  static const char proc_wspace_sep[] = { ' ', '\t', '\n' }; -static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table, +static int __do_proc_dointvec(void *tbl_data, const struct ctl_table *table,  		  int write, void *buffer,  		  size_t *lenp, loff_t *ppos,  		  int (*conv)(bool *negp, unsigned long *lvalp, int *valp, @@ -541,7 +541,7 @@ out:  	return err;  } -static int do_proc_dointvec(struct ctl_table *table, int write, +static int do_proc_dointvec(const struct ctl_table *table, int write,  		  void *buffer, size_t *lenp, loff_t *ppos,  		  int (*conv)(bool *negp, unsigned long *lvalp, int *valp,  			      int write, void *data), @@ -552,7 +552,7 @@ static int do_proc_dointvec(struct ctl_table *table, int write,  }  static int do_proc_douintvec_w(unsigned int *tbl_data, -			       struct ctl_table *table, +			       const struct ctl_table *table,  			       void *buffer,  			       size_t *lenp, loff_t *ppos,  			       int (*conv)(unsigned long *lvalp, @@ -639,7 +639,7 @@ out:  	return err;  } -static int __do_proc_douintvec(void *tbl_data, struct ctl_table *table, +static int __do_proc_douintvec(void *tbl_data, const struct ctl_table *table,  			       int write, void *buffer,  			       size_t *lenp, loff_t *ppos,  			       int (*conv)(unsigned long *lvalp, @@ -675,7 +675,7 @@ static int __do_proc_douintvec(void *tbl_data, struct ctl_table *table,  	return do_proc_douintvec_r(i, buffer, lenp, ppos, conv, data);  } -int do_proc_douintvec(struct ctl_table *table, int write, +int do_proc_douintvec(const struct ctl_table *table, int write,  		      void *buffer, size_t *lenp, loff_t *ppos,  		      int (*conv)(unsigned long *lvalp,  				  unsigned int *valp, @@ -977,16 +977,10 @@ int proc_dou8vec_minmax(struct ctl_table *table, int write,  	if (table->maxlen != sizeof(u8))  		return -EINVAL; -	if (table->extra1) { +	if (table->extra1)  		min = *(unsigned int *) table->extra1; -		if (min > 255U) -			return -EINVAL; -	} -	if (table->extra2) { +	if (table->extra2)  		max = *(unsigned int *) table->extra2; -		if (max > 255U) -			return -EINVAL; -	}  	tmp = *table; @@ -1023,8 +1017,9 @@ static int sysrq_sysctl_handler(struct ctl_table *table, int write,  }  #endif -static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table, -		int write, void *buffer, size_t *lenp, loff_t *ppos, +static int __do_proc_doulongvec_minmax(void *data, +		const struct ctl_table *table, int write, +		void *buffer, size_t *lenp, loff_t *ppos,  		unsigned long convmul, unsigned long convdiv)  {  	unsigned long *i, *min, *max; @@ -1096,7 +1091,7 @@ out:  	return err;  } -static int do_proc_doulongvec_minmax(struct ctl_table *table, int write, +static int do_proc_doulongvec_minmax(const struct ctl_table *table, int write,  		void *buffer, size_t *lenp, loff_t *ppos, unsigned long convmul,  		unsigned long convdiv)  {  |