Skip to content

Commit

Permalink
ucounts: add missing data type changes
Browse files Browse the repository at this point in the history
commit f9c82a4 ("Increase size of ucounts to atomic_long_t")
changed the data type of ucounts/ucounts_max to long, but missed to
adjust a few other places. This is noticeable on big endian platforms
from user space because the /proc/sys/user/max_*_names files all
contain 0.

v4 - Made the min and max constants long so the sysctl values
     are actually settable on little endian machines.
     -- EWB

Fixes: f9c82a4 ("Increase size of ucounts to atomic_long_t")
Signed-off-by: Sven Schnelle <[email protected]>
Tested-by: Nathan Chancellor <[email protected]>
Tested-by: Linux Kernel Functional Testing <[email protected]>
Acked-by: Alexey Gladkov <[email protected]>
v1: https://lkml.kernel.org/r/[email protected]
v2: https://lkml.kernel.org/r/[email protected]
v3: https://lkml.kernel.org/r/[email protected]
Link: https://lkml.kernel.org/r/8735rijqlv.fsf_-_@disp2133
Signed-off-by: Eric W. Biederman <[email protected]>
  • Loading branch information
svens-s390 authored and ebiederm committed Aug 9, 2021
1 parent 345daff commit f153c22
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 20 deletions.
17 changes: 11 additions & 6 deletions fs/notify/fanotify/fanotify_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,22 +54,27 @@ static int fanotify_max_queued_events __read_mostly;

#include <linux/sysctl.h>

static long ft_zero = 0;
static long ft_int_max = INT_MAX;

struct ctl_table fanotify_table[] = {
{
.procname = "max_user_groups",
.data = &init_user_ns.ucount_max[UCOUNT_FANOTIFY_GROUPS],
.maxlen = sizeof(int),
.maxlen = sizeof(long),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
.extra1 = SYSCTL_ZERO,
.proc_handler = proc_doulongvec_minmax,
.extra1 = &ft_zero,
.extra2 = &ft_int_max,
},
{
.procname = "max_user_marks",
.data = &init_user_ns.ucount_max[UCOUNT_FANOTIFY_MARKS],
.maxlen = sizeof(int),
.maxlen = sizeof(long),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
.extra1 = SYSCTL_ZERO,
.proc_handler = proc_doulongvec_minmax,
.extra1 = &ft_zero,
.extra2 = &ft_int_max,
},
{
.procname = "max_queued_events",
Expand Down
17 changes: 11 additions & 6 deletions fs/notify/inotify/inotify_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,22 +55,27 @@ struct kmem_cache *inotify_inode_mark_cachep __read_mostly;

#include <linux/sysctl.h>

static long it_zero = 0;
static long it_int_max = INT_MAX;

struct ctl_table inotify_table[] = {
{
.procname = "max_user_instances",
.data = &init_user_ns.ucount_max[UCOUNT_INOTIFY_INSTANCES],
.maxlen = sizeof(int),
.maxlen = sizeof(long),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
.extra1 = SYSCTL_ZERO,
.proc_handler = proc_doulongvec_minmax,
.extra1 = &it_zero,
.extra2 = &it_int_max,
},
{
.procname = "max_user_watches",
.data = &init_user_ns.ucount_max[UCOUNT_INOTIFY_WATCHES],
.maxlen = sizeof(int),
.maxlen = sizeof(long),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
.extra1 = SYSCTL_ZERO,
.proc_handler = proc_doulongvec_minmax,
.extra1 = &it_zero,
.extra2 = &it_int_max,
},
{
.procname = "max_queued_events",
Expand Down
19 changes: 11 additions & 8 deletions kernel/ucount.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,17 @@ static struct ctl_table_root set_root = {
.permissions = set_permissions,
};

#define UCOUNT_ENTRY(name) \
{ \
.procname = name, \
.maxlen = sizeof(int), \
.mode = 0644, \
.proc_handler = proc_dointvec_minmax, \
.extra1 = SYSCTL_ZERO, \
.extra2 = SYSCTL_INT_MAX, \
static long ue_zero = 0;
static long ue_int_max = INT_MAX;

#define UCOUNT_ENTRY(name) \
{ \
.procname = name, \
.maxlen = sizeof(long), \
.mode = 0644, \
.proc_handler = proc_doulongvec_minmax, \
.extra1 = &ue_zero, \
.extra2 = &ue_int_max, \
}
static struct ctl_table user_table[] = {
UCOUNT_ENTRY("max_user_namespaces"),
Expand Down

0 comments on commit f153c22

Please sign in to comment.