@@ -150,8 +150,8 @@ static int user_atoi(char __user *ubuf, size_t len)
/*
* Send us to sleep.
*/
-static int sysctl_pm_do_suspend(ctl_table *ctl, int write,
- void __user *buffer, size_t *lenp, loff_t *fpos)
+static int sysctl_pm_do_suspend(ctl_table *ctl, int write, void __user *buffer,
+ size_t *lenp, loff_t *fpos, void *cookie)
{
int retval, mode;
@@ -198,13 +198,13 @@ static int try_set_cmode(int new_cmode)
}
-static int cmode_procctl(ctl_table *ctl, int write,
- void __user *buffer, size_t *lenp, loff_t *fpos)
+static int cmode_procctl(ctl_table *ctl, int write, void __user *buffer,
+ size_t *lenp, loff_t *fpos, void *cookie)
{
int new_cmode;
if (!write)
- return proc_dointvec(ctl, write, buffer, lenp, fpos);
+ return proc_dointvec(ctl, write, buffer, lenp, fpos, NULL);
new_cmode = user_atoi(buffer, *lenp);
@@ -270,26 +270,26 @@ static int try_set_cm(int new_cm)
return 0;
}
-static int p0_procctl(ctl_table *ctl, int write,
- void __user *buffer, size_t *lenp, loff_t *fpos)
+static int p0_procctl(ctl_table *ctl, int write, void __user *buffer,
+ size_t *lenp, loff_t *fpos, void *cookie)
{
int new_p0;
if (!write)
- return proc_dointvec(ctl, write, buffer, lenp, fpos);
+ return proc_dointvec(ctl, write, buffer, lenp, fpos, NULL);
new_p0 = user_atoi(buffer, *lenp);
return try_set_p0(new_p0)?:*lenp;
}
-static int cm_procctl(ctl_table *ctl, int write,
- void __user *buffer, size_t *lenp, loff_t *fpos)
+static int cm_procctl(ctl_table *ctl, int write, void __user *buffer,
+ size_t *lenp, loff_t *fpos, void *cookie)
{
int new_cm;
if (!write)
- return proc_dointvec(ctl, write, buffer, lenp, fpos);
+ return proc_dointvec(ctl, write, buffer, lenp, fpos, NULL);
new_cm = user_atoi(buffer, *lenp);
@@ -48,7 +48,7 @@ static void frv_change_dcache_mode(unsigned long newmode)
*/
static int procctl_frv_cachemode(ctl_table *table, int write,
void __user *buffer, size_t *lenp,
- loff_t *ppos)
+ loff_t *ppos, void *cookie)
{
unsigned long hsr0;
char buff[8];
@@ -123,7 +123,7 @@ static int procctl_frv_cachemode(ctl_table *table, int write,
#ifdef CONFIG_MMU
static int procctl_frv_pin_cxnr(ctl_table *table, int write,
void __user *buffer, size_t *lenp,
- loff_t *ppos)
+ loff_t *ppos, void *cookie)
{
pid_t pid;
char buff[16], *p;
@@ -39,12 +39,12 @@
/* And the same for proc */
-int proc_dolasatstring(ctl_table *table, int write,
- void *buffer, size_t *lenp, loff_t *ppos)
+int proc_dolasatstring(ctl_table *table, int write, void *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
int r;
- r = proc_dostring(table, write, buffer, lenp, ppos);
+ r = proc_dostring(table, write, buffer, lenp, ppos, NULL);
if ((!write) || r)
return r;
@@ -54,12 +54,12 @@ int proc_dolasatstring(ctl_table *table, int write,
}
/* proc function to write EEPROM after changing int entry */
-int proc_dolasatint(ctl_table *table, int write,
- void *buffer, size_t *lenp, loff_t *ppos)
+int proc_dolasatint(ctl_table *table, int write, void *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
int r;
- r = proc_dointvec(table, write, buffer, lenp, ppos);
+ r = proc_dointvec(table, write, buffer, lenp, ppos, NULL);
if ((!write) || r)
return r;
@@ -72,8 +72,8 @@ int proc_dolasatint(ctl_table *table, int write,
static int rtctmp;
/* proc function to read/write RealTime Clock */
-int proc_dolasatrtc(ctl_table *table, int write,
- void *buffer, size_t *lenp, loff_t *ppos)
+int proc_dolasatrtc(ctl_table *table, int write, void *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
struct timespec ts;
int r;
@@ -85,7 +85,7 @@ int proc_dolasatrtc(ctl_table *table, int write,
if (rtctmp < 0)
rtctmp = 0;
}
- r = proc_dointvec(table, write, buffer, lenp, ppos);
+ r = proc_dointvec(table, write, buffer, lenp, ppos, NULL);
if (r)
return r;
@@ -97,8 +97,8 @@ int proc_dolasatrtc(ctl_table *table, int write,
#endif
#ifdef CONFIG_INET
-int proc_lasat_ip(ctl_table *table, int write,
- void *buffer, size_t *lenp, loff_t *ppos)
+int proc_lasat_ip(ctl_table *table, int write, void *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
unsigned int ip;
char *p, c;
@@ -157,12 +157,12 @@ int proc_lasat_ip(ctl_table *table, int write,
}
#endif
-int proc_lasat_prid(ctl_table *table, int write,
- void *buffer, size_t *lenp, loff_t *ppos)
+int proc_lasat_prid(ctl_table *table, int write, void *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
int r;
- r = proc_dointvec(table, write, buffer, lenp, ppos);
+ r = proc_dointvec(table, write, buffer, lenp, ppos, NULL);
if (r < 0)
return r;
if (write) {
@@ -51,10 +51,11 @@ static struct platform_device *appldata_pdev;
*/
static const char appldata_proc_name[APPLDATA_PROC_NAME_LENGTH] = "appldata";
static int appldata_timer_handler(ctl_table *ctl, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos);
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie);
static int appldata_interval_handler(ctl_table *ctl, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos);
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie);
static struct ctl_table_header *appldata_sysctl_header;
static struct ctl_table appldata_table[] = {
@@ -246,8 +247,8 @@ __appldata_vtimer_setup(int cmd)
* Start/Stop timer, show status of timer (0 = not active, 1 = active)
*/
static int
-appldata_timer_handler(ctl_table *ctl, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+appldata_timer_handler(ctl_table *ctl, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
int len;
char buf[2];
@@ -334,8 +335,8 @@ out:
* monitoring (0 = not in process, 1 = in process)
*/
static int
-appldata_generic_handler(ctl_table *ctl, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+appldata_generic_handler(ctl_table *ctl, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
struct appldata_ops *ops = NULL, *tmp_ops;
int rc, len, found;
@@ -884,11 +884,11 @@ static int debug_active=1;
* if debug_active is already off
*/
static int
-s390dbf_procactive(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+s390dbf_procactive(ctl_table *table, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
if (!write || debug_stoppable || !debug_active)
- return proc_dointvec(table, write, buffer, lenp, ppos);
+ return proc_dointvec(table, write, buffer, lenp, ppos, NULL);
else
return 0;
}
@@ -254,7 +254,7 @@ static int cmm_skip_blanks(char *cp, char **endp)
static struct ctl_table cmm_table[];
static int cmm_pages_handler(ctl_table *ctl, int write, void __user *buffer,
- size_t *lenp, loff_t *ppos)
+ size_t *lenp, loff_t *ppos, void *cookie)
{
char buf[16], *p;
long nr;
@@ -294,7 +294,7 @@ static int cmm_pages_handler(ctl_table *ctl, int write, void __user *buffer,
}
static int cmm_timeout_handler(ctl_table *ctl, int write, void __user *buffer,
- size_t *lenp, loff_t *ppos)
+ size_t *lenp, loff_t *ppos, void *cookie)
{
char buf[64], *p;
long nr, seconds;
@@ -3469,8 +3469,8 @@ static int cdrom_print_info(const char *header, int val, char *info,
return 0;
}
-static int cdrom_sysctl_info(ctl_table *ctl, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+static int cdrom_sysctl_info(ctl_table *ctl, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
int pos;
char *info = cdrom_sysctl_settings.info;
@@ -3546,7 +3546,7 @@ static int cdrom_sysctl_info(ctl_table *ctl, int write,
goto done;
doit:
mutex_unlock(&cdrom_mutex);
- return proc_dostring(ctl, write, buffer, lenp, ppos);
+ return proc_dostring(ctl, write, buffer, lenp, ppos, NULL);
done:
pr_info("info buffer too small\n");
goto doit;
@@ -3582,12 +3582,12 @@ static void cdrom_update_settings(void)
mutex_unlock(&cdrom_mutex);
}
-static int cdrom_sysctl_handler(ctl_table *ctl, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+static int cdrom_sysctl_handler(ctl_table *ctl, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
int ret;
- ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
+ ret = proc_dointvec(ctl, write, buffer, lenp, ppos, NULL);
if (write) {
@@ -1227,8 +1227,8 @@ static char sysctl_bootid[16];
* as an ASCII string in the standard UUID format. If accesses via the
* sysctl system call, it is returned as 16 bytes of binary data.
*/
-static int proc_do_uuid(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+static int proc_do_uuid(ctl_table *table, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
ctl_table fake_table;
unsigned char buf[64], tmp_uuid[16], *uuid;
@@ -1246,7 +1246,7 @@ static int proc_do_uuid(ctl_table *table, int write,
fake_table.data = buf;
fake_table.maxlen = sizeof(buf);
- return proc_dostring(&fake_table, write, buffer, lenp, ppos);
+ return proc_dostring(&fake_table, write, buffer, lenp, ppos, NULL);
}
static int sysctl_poolsize = INPUT_POOL_WORDS * 32;
@@ -183,7 +183,7 @@ static void mac_hid_stop_emulation(void)
static int mac_hid_toggle_emumouse(ctl_table *table, int write,
void __user *buffer, size_t *lenp,
- loff_t *ppos)
+ loff_t *ppos, void *cookie)
{
int *valp = table->data;
int old_val = *valp;
@@ -193,7 +193,7 @@ static int mac_hid_toggle_emumouse(ctl_table *table, int write,
if (rc)
return rc;
- rc = proc_dointvec(table, write, buffer, lenp, ppos);
+ rc = proc_dointvec(table, write, buffer, lenp, ppos, NULL);
if (rc == 0 && write && *valp != old_val) {
if (*valp == 1)
@@ -31,8 +31,8 @@
#define PARPORT_MIN_SPINTIME_VALUE 1
#define PARPORT_MAX_SPINTIME_VALUE 1000
-static int do_active_device(ctl_table *table, int write,
- void __user *result, size_t *lenp, loff_t *ppos)
+static int do_active_device(ctl_table *table, int write, void __user *result,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
struct parport *port = (struct parport *)table->extra1;
char buffer[256];
@@ -68,8 +68,8 @@ static int do_active_device(ctl_table *table, int write,
}
#ifdef CONFIG_PARPORT_1284
-static int do_autoprobe(ctl_table *table, int write,
- void __user *result, size_t *lenp, loff_t *ppos)
+static int do_autoprobe(ctl_table *table, int write, void __user *result,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
struct parport_device_info *info = table->extra2;
const char *str;
@@ -110,9 +110,9 @@ static int do_autoprobe(ctl_table *table, int write,
}
#endif /* IEEE1284.3 support. */
-static int do_hardware_base_addr (ctl_table *table, int write,
- void __user *result,
- size_t *lenp, loff_t *ppos)
+static int do_hardware_base_addr(ctl_table *table, int write,
+ void __user *result, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
struct parport *port = (struct parport *)table->extra1;
char buffer[20];
@@ -138,9 +138,8 @@ static int do_hardware_base_addr (ctl_table *table, int write,
return copy_to_user(result, buffer, len) ? -EFAULT : 0;
}
-static int do_hardware_irq (ctl_table *table, int write,
- void __user *result,
- size_t *lenp, loff_t *ppos)
+static int do_hardware_irq(ctl_table *table, int write, void __user *result,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
struct parport *port = (struct parport *)table->extra1;
char buffer[20];
@@ -166,9 +165,8 @@ static int do_hardware_irq (ctl_table *table, int write,
return copy_to_user(result, buffer, len) ? -EFAULT : 0;
}
-static int do_hardware_dma (ctl_table *table, int write,
- void __user *result,
- size_t *lenp, loff_t *ppos)
+static int do_hardware_dma(ctl_table *table, int write, void __user *result,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
struct parport *port = (struct parport *)table->extra1;
char buffer[20];
@@ -194,9 +192,8 @@ static int do_hardware_dma (ctl_table *table, int write,
return copy_to_user(result, buffer, len) ? -EFAULT : 0;
}
-static int do_hardware_modes (ctl_table *table, int write,
- void __user *result,
- size_t *lenp, loff_t *ppos)
+static int do_hardware_modes(ctl_table *table, int write, void __user *result,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
struct parport *port = (struct parport *)table->extra1;
char buffer[40];
@@ -65,7 +65,7 @@ static struct notifier_block call_home_panic_nb = {
static int proc_handler_callhome(struct ctl_table *ctl, int write,
void __user *buffer, size_t *count,
- loff_t *ppos)
+ loff_t *ppos, void *cookie)
{
unsigned long val;
int len, rc;
@@ -140,10 +140,10 @@ static int get_nr_dentry(void)
}
int proc_nr_dentry(ctl_table *table, int write, void __user *buffer,
- size_t *lenp, loff_t *ppos)
+ size_t *lenp, loff_t *ppos, void *cookie)
{
dentry_stat.nr_dentry = get_nr_dentry();
- return proc_dointvec(table, write, buffer, lenp, ppos);
+ return proc_dointvec(table, write, buffer, lenp, ppos, NULL);
}
#endif
@@ -47,11 +47,12 @@ static void drop_slab(void)
}
int drop_caches_sysctl_handler(ctl_table *table, int write,
- void __user *buffer, size_t *length, loff_t *ppos)
+ void __user *buffer, size_t *length,
+ loff_t *ppos, void *cookie)
{
int ret;
- ret = proc_dointvec_minmax(table, write, buffer, length, ppos);
+ ret = proc_dointvec_minmax(table, write, buffer, length, ppos, NULL);
if (ret)
return ret;
if (write) {
@@ -78,15 +78,15 @@ EXPORT_SYMBOL_GPL(get_max_files);
* Handle nr_files sysctl
*/
#if defined(CONFIG_SYSCTL) && defined(CONFIG_PROC_FS)
-int proc_nr_files(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+int proc_nr_files(ctl_table *table, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
files_stat.nr_files = get_nr_files();
- return proc_doulongvec_minmax(table, write, buffer, lenp, ppos);
+ return proc_doulongvec_minmax(table, write, buffer, lenp, ppos, NULL);
}
#else
-int proc_nr_files(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+int proc_nr_files(ctl_table *table, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
return -ENOSYS;
}
@@ -54,14 +54,14 @@ static unsigned fscache_op_max_active = 2;
static struct ctl_table_header *fscache_sysctl_header;
static int fscache_max_active_sysctl(struct ctl_table *table, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
struct workqueue_struct **wqp = table->extra1;
unsigned int *datap = table->data;
int ret;
- ret = proc_dointvec(table, write, buffer, lenp, ppos);
+ ret = proc_dointvec(table, write, buffer, lenp, ppos, NULL);
if (ret == 0)
workqueue_set_max_active(*wqp, *datap);
return ret;
@@ -158,11 +158,11 @@ int get_nr_dirty_inodes(void)
* Handle nr_inode sysctl
*/
#ifdef CONFIG_SYSCTL
-int proc_nr_inodes(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+int proc_nr_inodes(ctl_table *table, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
inodes_stat.nr_inodes = get_nr_inodes();
- return proc_dointvec(table, write, buffer, lenp, ppos);
+ return proc_dointvec(table, write, buffer, lenp, ppos, NULL);
}
#endif
@@ -1186,11 +1186,11 @@ static inline unsigned int round_pipe_size(unsigned int size)
* will return an error.
*/
int pipe_proc_fn(struct ctl_table *table, int write, void __user *buf,
- size_t *lenp, loff_t *ppos)
+ size_t *lenp, loff_t *ppos, void *cookie)
{
int ret;
- ret = proc_dointvec_minmax(table, write, buf, lenp, ppos);
+ ret = proc_dointvec_minmax(table, write, buf, lenp, ppos, NULL);
if (ret < 0 || !write)
return ret;
@@ -155,7 +155,8 @@ static ssize_t proc_sys_call_handler(struct file *filp, void __user *buf,
/* careful: calling conventions are nasty here */
res = count;
- error = table->proc_handler(table, write, buf, &res, ppos);
+ error = table->proc_handler(table, write, buf, &res,
+ ppos, head->ctl_header_cookie);
if (!error)
error = res;
out:
@@ -2517,14 +2517,15 @@ const struct quotactl_ops dquot_quotactl_ops = {
EXPORT_SYMBOL(dquot_quotactl_ops);
static int do_proc_dqstats(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
unsigned int type = (int *)table->data - dqstats.stat;
/* Update global table */
dqstats.stat[type] =
percpu_counter_sum_positive(&dqstats.counter[type]);
- return proc_dointvec(table, write, buffer, lenp, ppos);
+ return proc_dointvec(table, write, buffer, lenp, ppos, NULL);
}
static ctl_table fs_dqstats_table[] = {
@@ -29,12 +29,13 @@ xfs_stats_clear_proc_handler(
int write,
void __user *buffer,
size_t *lenp,
- loff_t *ppos)
+ loff_t *ppos,
+ void *cookie)
{
int c, ret, *valp = ctl->data;
__uint32_t vn_active;
- ret = proc_dointvec_minmax(ctl, write, buffer, lenp, ppos);
+ ret = proc_dointvec_minmax(ctl, write, buffer, lenp, ppos, NULL);
if (!ret && write && *valp) {
xfs_notice(NULL, "Clearing xfsstats");
@@ -59,11 +60,12 @@ xfs_panic_mask_proc_handler(
int write,
void __user *buffer,
size_t *lenp,
- loff_t *ppos)
+ loff_t *ppos,
+ void *cookie)
{
int ret, *valp = ctl->data;
- ret = proc_dointvec_minmax(ctl, write, buffer, lenp, ppos);
+ ret = proc_dointvec_minmax(ctl, write, buffer, lenp, ppos, NULL);
if (!ret && write) {
xfs_panic_mask = *valp;
#ifdef DEBUG
@@ -14,10 +14,12 @@
#ifdef CONFIG_COMPACTION
extern int sysctl_compact_memory;
extern int sysctl_compaction_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *length, loff_t *ppos);
+ void __user *buffer, size_t *length,
+ loff_t *ppos, void *cookie);
extern int sysctl_extfrag_threshold;
extern int sysctl_extfrag_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *length, loff_t *ppos);
+ void __user *buffer, size_t *length,
+ loff_t *ppos, void *cookie);
extern int fragmentation_index(struct zone *zone, unsigned int order);
extern unsigned long try_to_compact_pages(struct zonelist *zonelist,
@@ -2562,12 +2562,12 @@ ssize_t simple_attr_write(struct file *file, const char __user *buf,
size_t len, loff_t *ppos);
struct ctl_table;
-int proc_nr_files(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos);
-int proc_nr_dentry(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos);
-int proc_nr_inodes(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos);
+int proc_nr_files(struct ctl_table *table, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie);
+int proc_nr_dentry(struct ctl_table *table, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie);
+int proc_nr_inodes(struct ctl_table *table, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie);
int __init get_filesystem_list(char *buf);
#define __FMODE_EXEC ((__force int) FMODE_EXEC)
@@ -25,7 +25,7 @@ extern int ftrace_enabled;
extern int
ftrace_enable_sysctl(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp,
- loff_t *ppos);
+ loff_t *ppos, void *cookie);
typedef void (*ftrace_func_t)(unsigned long ip, unsigned long parent_ip);
@@ -104,7 +104,7 @@ extern int stack_tracer_enabled;
int
stack_trace_sysctl(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp,
- loff_t *ppos);
+ loff_t *ppos, void *cookie);
#endif
struct ftrace_func_command {
@@ -16,13 +16,16 @@ struct user_struct;
int PageHuge(struct page *page);
void reset_vma_resv_huge_pages(struct vm_area_struct *vma);
-int hugetlb_sysctl_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *);
-int hugetlb_overcommit_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *);
-int hugetlb_treat_movable_handler(struct ctl_table *, int, void __user *, size_t *, loff_t *);
+int hugetlb_sysctl_handler(struct ctl_table *, int, void __user *,
+ size_t *, loff_t *, void *);
+int hugetlb_overcommit_handler(struct ctl_table *, int, void __user *,
+ size_t *, loff_t *, void *);
+int hugetlb_treat_movable_handler(struct ctl_table *, int, void __user *,
+ size_t *, loff_t *, void *);
#ifdef CONFIG_NUMA
-int hugetlb_mempolicy_sysctl_handler(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
+int hugetlb_mempolicy_sysctl_handler(struct ctl_table *, int, void __user *,
+ size_t *, loff_t *, void *);
#endif
int copy_hugetlb_page_range(struct mm_struct *, struct mm_struct *, struct vm_area_struct *);
@@ -288,9 +288,9 @@ extern void opt_pre_handler(struct kprobe *p, struct pt_regs *regs);
#ifdef CONFIG_SYSCTL
extern int sysctl_kprobes_optimization;
-extern int proc_kprobes_optimization_handler(struct ctl_table *table,
- int write, void __user *buffer,
- size_t *length, loff_t *ppos);
+extern int proc_kprobes_optimization_handler(struct ctl_table *table, int write,
+ void __user *buffer, size_t *len,
+ loff_t *ppos, void *cookie);
#endif
#endif /* CONFIG_OPTPROBES */
@@ -1602,8 +1602,8 @@ int in_gate_area_no_mm(unsigned long addr);
#define in_gate_area(mm, addr) ({(void)mm; in_gate_area_no_mm(addr);})
#endif /* __HAVE_ARCH_GATE_AREA */
-int drop_caches_sysctl_handler(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
+int drop_caches_sysctl_handler(struct ctl_table *, int, void __user *,
+ size_t *, loff_t *, void *);
unsigned long shrink_slab(unsigned long scanned, gfp_t gfp_mask,
unsigned long lru_pages);
@@ -764,20 +764,21 @@ static inline int is_dma(struct zone *zone)
/* These two functions are used to setup the per zone pages min values */
struct ctl_table;
-int min_free_kbytes_sysctl_handler(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
+int min_free_kbytes_sysctl_handler(struct ctl_table *, int, void __user *,
+ size_t *, loff_t *, void *);
extern int sysctl_lowmem_reserve_ratio[MAX_NR_ZONES-1];
-int lowmem_reserve_ratio_sysctl_handler(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
+int lowmem_reserve_ratio_sysctl_handler(struct ctl_table *, int, void __user *,
+ size_t *, loff_t *, void *);
int percpu_pagelist_fraction_sysctl_handler(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
+ void __user *, size_t *,
+ loff_t *, void *);
int sysctl_min_unmapped_ratio_sysctl_handler(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
-int sysctl_min_slab_ratio_sysctl_handler(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
-
-extern int numa_zonelist_order_handler(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
+ void __user *, size_t *,
+ loff_t *, void *);
+int sysctl_min_slab_ratio_sysctl_handler(struct ctl_table *, int, void __user *,
+ size_t *, loff_t *, void *);
+int numa_zonelist_order_handler(struct ctl_table *, int, void __user *,
+ size_t *, loff_t *, void *);
extern char numa_zonelist_order[];
#define NUMA_ZONELIST_ORDER_LEN 16 /* string buffer size */
@@ -48,8 +48,8 @@ int hw_nmi_is_cpu_stuck(struct pt_regs *);
u64 hw_nmi_get_sample_period(void);
extern int watchdog_enabled;
struct ctl_table;
-extern int proc_dowatchdog_enabled(struct ctl_table *, int ,
- void __user *, size_t *, loff_t *);
+extern int proc_dowatchdog_enabled(struct ctl_table *, int, void __user *,
+ size_t *, loff_t *, void *);
#endif
#endif
@@ -1119,7 +1119,7 @@ extern int sysctl_perf_event_sample_rate;
extern int perf_proc_update_handler(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp,
- loff_t *ppos);
+ loff_t *ppos, void *cookie);
static inline bool perf_paranoid_tracepoint_raw(void)
{
@@ -141,7 +141,7 @@ void pipe_unlock(struct pipe_inode_info *);
void pipe_double_lock(struct pipe_inode_info *, struct pipe_inode_info *);
extern unsigned int pipe_max_size, pipe_min_size;
-int pipe_proc_fn(struct ctl_table *, int, void __user *, size_t *, loff_t *);
+int pipe_proc_fn(struct ctl_table *, int, void __user *, size_t *, loff_t *, void *);
/* Drop the inode semaphore and wait for a pipe event, atomically */
@@ -312,8 +312,8 @@ extern void touch_softlockup_watchdog(void);
extern void touch_softlockup_watchdog_sync(void);
extern void touch_all_softlockup_watchdogs(void);
extern int proc_dowatchdog_thresh(struct ctl_table *table, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos);
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie);
extern unsigned int softlockup_panic;
extern int softlockup_thresh;
void lockup_detector_init(void);
@@ -338,8 +338,8 @@ extern unsigned long sysctl_hung_task_check_count;
extern unsigned long sysctl_hung_task_timeout_secs;
extern unsigned long sysctl_hung_task_warnings;
extern int proc_dohung_task_timeout_secs(struct ctl_table *table, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos);
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie);
#else
/* Avoid need for ifdefs elsewhere in the code */
enum { sysctl_hung_task_timeout_secs = 0 };
@@ -1929,8 +1929,8 @@ extern unsigned int sysctl_timer_migration;
extern unsigned int sysctl_sched_shares_window;
int sched_proc_update_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *length,
- loff_t *ppos);
+ void __user *buffer, size_t *length,
+ loff_t *ppos, void *cookie);
#endif
#ifdef CONFIG_SCHED_DEBUG
static inline unsigned int get_sysctl_timer_migration(void)
@@ -1947,8 +1947,8 @@ extern unsigned int sysctl_sched_rt_period;
extern int sysctl_sched_rt_runtime;
int sched_rt_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp,
- loff_t *ppos);
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie);
#ifdef CONFIG_SCHED_AUTOGROUP
extern unsigned int sysctl_sched_autogroup_enabled;
@@ -144,7 +144,8 @@ static inline unsigned long round_hint_to_min(unsigned long hint)
return hint;
}
extern int mmap_min_addr_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos);
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie);
#endif
#ifdef CONFIG_SECURITY
@@ -281,8 +281,8 @@ extern int page_evictable(struct page *page, struct vm_area_struct *vma);
extern void scan_mapping_unevictable_pages(struct address_space *);
extern unsigned long scan_unevictable_pages;
-extern int scan_unevictable_handler(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
+extern int scan_unevictable_handler(struct ctl_table *, int, void __user *,
+ size_t *, loff_t *, void *);
#ifdef CONFIG_NUMA
extern int scan_unevictable_register_node(struct node *node);
extern void scan_unevictable_unregister_node(struct node *node);
@@ -963,26 +963,36 @@ extern int sysctl_perm(struct ctl_table_root *root,
typedef struct ctl_table ctl_table;
typedef int proc_handler (struct ctl_table *ctl, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos);
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie);
extern int proc_dostring(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
+ void __user *, size_t *,
+ loff_t *, void *);
extern int proc_dointvec(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
+ void __user *, size_t *,
+ loff_t *, void *);
extern int proc_dointvec_minmax(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
+ void __user *, size_t *,
+ loff_t *, void *);
extern int proc_dointvec_jiffies(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
+ void __user *, size_t *,
+ loff_t *, void *);
extern int proc_dointvec_userhz_jiffies(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
+ void __user *, size_t *,
+ loff_t *, void *);
extern int proc_dointvec_ms_jiffies(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
+ void __user *, size_t *,
+ loff_t *, void *);
extern int proc_doulongvec_minmax(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
+ void __user *, size_t *,
+ loff_t *, void *);
extern int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int,
- void __user *, size_t *, loff_t *);
+ void __user *, size_t *,
+ loff_t *, void *);
extern int proc_do_large_bitmap(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
+ void __user *, size_t *,
+ loff_t *, void *);
/*
* Register a set of sysctl names by calling register_sysctl_table
@@ -108,21 +108,15 @@ extern int laptop_mode;
extern unsigned long determine_dirtyable_memory(void);
extern int dirty_background_ratio_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp,
- loff_t *ppos);
+ void __user *buffer, size_t *lenp, loff_t *ppos, void *cookie);
extern int dirty_background_bytes_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp,
- loff_t *ppos);
+ void __user *buffer, size_t *lenp, loff_t *ppos, void *cookie);
extern int dirty_ratio_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp,
- loff_t *ppos);
+ void __user *buffer, size_t *lenp, loff_t *ppos, void *cookie);
extern int dirty_bytes_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp,
- loff_t *ppos);
-
-struct ctl_table;
-int dirty_writeback_centisecs_handler(struct ctl_table *, int,
- void __user *, size_t *, loff_t *);
+ void __user *buffer, size_t *lenp, loff_t *ppos, void *cookie);
+extern int dirty_writeback_centisecs_handler(struct ctl_table *table, int write,
+ void __user *buffer, size_t *lenp, loff_t *ppos, void *cookie);
void global_dirty_limits(unsigned long *pbackground, unsigned long *pdirty);
unsigned long bdi_dirty_limit(struct backing_dev_info *bdi,
@@ -137,10 +137,13 @@ extern int ndisc_ifinfo_sysctl_change(struct ctl_table *ctl,
int write,
void __user *buffer,
size_t *lenp,
- loff_t *ppos);
+ loff_t *ppos,
+ void *cookie);
+
int ndisc_ifinfo_sysctl_strategy(ctl_table *ctl,
void __user *oldval, size_t __user *oldlenp,
- void __user *newval, size_t newlen);
+ void __user *newval, size_t newlen,
+ void *cookie);
#endif
extern void inet6_ifinfo_notify(int event,
@@ -27,18 +27,19 @@ static void *get_ipc(ctl_table *table)
}
#ifdef CONFIG_PROC_SYSCTL
-static int proc_ipc_dointvec(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+static int proc_ipc_dointvec(ctl_table *table, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
struct ctl_table ipc_table;
memcpy(&ipc_table, table, sizeof(ipc_table));
ipc_table.data = get_ipc(table);
- return proc_dointvec(&ipc_table, write, buffer, lenp, ppos);
+ return proc_dointvec(&ipc_table, write, buffer, lenp, ppos, NULL);
}
static int proc_ipc_callback_dointvec(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
struct ctl_table ipc_table;
size_t lenp_bef = *lenp;
@@ -47,7 +48,7 @@ static int proc_ipc_callback_dointvec(ctl_table *table, int write,
memcpy(&ipc_table, table, sizeof(ipc_table));
ipc_table.data = get_ipc(table);
- rc = proc_dointvec(&ipc_table, write, buffer, lenp, ppos);
+ rc = proc_dointvec(&ipc_table, write, buffer, lenp, ppos, NULL);
if (write && !rc && lenp_bef == *lenp)
/*
@@ -61,14 +62,15 @@ static int proc_ipc_callback_dointvec(ctl_table *table, int write,
}
static int proc_ipc_doulongvec_minmax(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
struct ctl_table ipc_table;
memcpy(&ipc_table, table, sizeof(ipc_table));
ipc_table.data = get_ipc(table);
return proc_doulongvec_minmax(&ipc_table, write, buffer,
- lenp, ppos);
+ lenp, ppos, NULL);
}
/*
@@ -95,7 +97,8 @@ static void ipc_auto_callback(int val)
}
static int proc_ipcauto_dointvec_minmax(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
struct ctl_table ipc_table;
size_t lenp_bef = *lenp;
@@ -106,7 +109,7 @@ static int proc_ipcauto_dointvec_minmax(ctl_table *table, int write,
ipc_table.data = get_ipc(table);
oldval = *((int *)(ipc_table.data));
- rc = proc_dointvec_minmax(&ipc_table, write, buffer, lenp, ppos);
+ rc = proc_dointvec_minmax(&ipc_table, write, buffer, lenp, ppos, NULL);
if (write && !rc && lenp_bef == *lenp) {
int newval = *((int *)(ipc_table.data));
@@ -31,25 +31,26 @@ static void *get_mq(ctl_table *table)
return which;
}
-static int proc_mq_dointvec(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+static int proc_mq_dointvec(ctl_table *table, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
struct ctl_table mq_table;
memcpy(&mq_table, table, sizeof(mq_table));
mq_table.data = get_mq(table);
- return proc_dointvec(&mq_table, write, buffer, lenp, ppos);
+ return proc_dointvec(&mq_table, write, buffer, lenp, ppos, NULL);
}
static int proc_mq_dointvec_minmax(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
struct ctl_table mq_table;
memcpy(&mq_table, table, sizeof(mq_table));
mq_table.data = get_mq(table);
return proc_dointvec_minmax(&mq_table, write, buffer,
- lenp, ppos);
+ lenp, ppos, NULL);
}
#else
#define proc_mq_dointvec NULL
@@ -171,12 +171,12 @@ static unsigned long timeout_jiffies(unsigned long timeout)
* Process updating of timeout sysctl
*/
int proc_dohung_task_timeout_secs(struct ctl_table *table, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
int ret;
- ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos);
+ ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos, NULL);
if (ret || !write)
goto out;
@@ -826,13 +826,13 @@ static void __kprobes unoptimize_all_kprobes(void)
int sysctl_kprobes_optimization;
int proc_kprobes_optimization_handler(struct ctl_table *table, int write,
void __user *buffer, size_t *length,
- loff_t *ppos)
+ loff_t *ppos, void *cookie)
{
int ret;
mutex_lock(&kprobe_mutex);
sysctl_kprobes_optimization = kprobes_allow_optimization ? 1 : 0;
- ret = proc_dointvec_minmax(table, write, buffer, length, ppos);
+ ret = proc_dointvec_minmax(table, write, buffer, length, ppos, NULL);
if (sysctl_kprobes_optimization)
optimize_all_kprobes();
@@ -158,9 +158,9 @@ static int max_samples_per_tick __read_mostly =
int perf_proc_update_handler(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp,
- loff_t *ppos)
+ loff_t *ppos, void *cookie)
{
- int ret = proc_dointvec(table, write, buffer, lenp, ppos);
+ int ret = proc_dointvec(table, write, buffer, lenp, ppos, NULL);
if (ret || !write)
return ret;
@@ -8982,7 +8982,7 @@ static int sched_rt_global_constraints(void)
int sched_rt_handler(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp,
- loff_t *ppos)
+ loff_t *ppos, void *cookie)
{
int ret;
int old_period, old_runtime;
@@ -8992,7 +8992,7 @@ int sched_rt_handler(struct ctl_table *table, int write,
old_period = sysctl_sched_rt_period;
old_runtime = sysctl_sched_rt_runtime;
- ret = proc_dointvec(table, write, buffer, lenp, ppos);
+ ret = proc_dointvec(table, write, buffer, lenp, ppos, NULL);
if (!ret && write) {
ret = sched_rt_global_constraints();
@@ -448,9 +448,9 @@ static struct sched_entity *__pick_last_entity(struct cfs_rq *cfs_rq)
int sched_proc_update_handler(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp,
- loff_t *ppos)
+ loff_t *ppos, void *cookie)
{
- int ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
+ int ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos, NULL);
int factor = get_update_sysctl_factor();
if (ret || !write)
@@ -165,14 +165,17 @@ extern int unaligned_dump_stack;
#ifdef CONFIG_PROC_SYSCTL
static int proc_do_cad_pid(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos);
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie);
static int proc_taint(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos);
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie);
#endif
#ifdef CONFIG_PRINTK
static int proc_dmesg_restrict(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos);
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie);
#endif
#ifdef CONFIG_MAGIC_SYSRQ
@@ -181,11 +184,11 @@ static int __sysrq_enabled = SYSRQ_DEFAULT_ENABLE;
static int sysrq_sysctl_handler(ctl_table *table, int write,
void __user *buffer, size_t *lenp,
- loff_t *ppos)
+ loff_t *ppos, void *cookie)
{
int error;
- error = proc_dointvec(table, write, buffer, lenp, ppos);
+ error = proc_dointvec(table, write, buffer, lenp, ppos, NULL);
if (error)
return error;
@@ -2089,6 +2092,7 @@ static int _proc_do_string(void* data, int maxlen, int write,
* @buffer: the user buffer
* @lenp: the size of the user buffer
* @ppos: file position
+ * @cookie: ignored by this handler
*
* Reads/writes a string from/to the user buffer. If the kernel
* buffer provided is not large enough to hold the string, the
@@ -2100,7 +2104,8 @@ static int _proc_do_string(void* data, int maxlen, int write,
* Returns 0 on success.
*/
int proc_dostring(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
return _proc_do_string(table->data, table->maxlen, write,
buffer, lenp, ppos);
@@ -2355,6 +2360,7 @@ static int do_proc_dointvec(struct ctl_table *table, int write,
* @buffer: the user buffer
* @lenp: the size of the user buffer
* @ppos: file position
+ * @cookie: ignored by this handler
*
* Reads/writes up to table->maxlen/sizeof(unsigned int) integer
* values from/to the user buffer, treated as an ASCII string.
@@ -2362,7 +2368,8 @@ static int do_proc_dointvec(struct ctl_table *table, int write,
* Returns 0 on success.
*/
int proc_dointvec(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
return do_proc_dointvec(table,write,buffer,lenp,ppos,
NULL,NULL);
@@ -2373,7 +2380,8 @@ int proc_dointvec(struct ctl_table *table, int write,
* This means we can safely use a temporary.
*/
static int proc_taint(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
struct ctl_table t;
unsigned long tmptaint = get_taint();
@@ -2384,7 +2392,7 @@ static int proc_taint(struct ctl_table *table, int write,
t = *table;
t.data = &tmptaint;
- err = proc_doulongvec_minmax(&t, write, buffer, lenp, ppos);
+ err = proc_doulongvec_minmax(&t, write, buffer, lenp, ppos, NULL);
if (err < 0)
return err;
@@ -2405,12 +2413,13 @@ static int proc_taint(struct ctl_table *table, int write,
#ifdef CONFIG_PRINTK
static int proc_dmesg_restrict(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
if (write && !capable(CAP_SYS_ADMIN))
return -EPERM;
- return proc_dointvec_minmax(table, write, buffer, lenp, ppos);
+ return proc_dointvec_minmax(table, write, buffer, lenp, ppos, NULL);
}
#endif
@@ -2450,6 +2459,7 @@ static int do_proc_dointvec_minmax_conv(bool *negp, unsigned long *lvalp,
* @buffer: the user buffer
* @lenp: the size of the user buffer
* @ppos: file position
+ * @cookie: ignored by this handler
*
* Reads/writes up to table->maxlen/sizeof(unsigned int) integer
* values from/to the user buffer, treated as an ASCII string.
@@ -2460,7 +2470,8 @@ static int do_proc_dointvec_minmax_conv(bool *negp, unsigned long *lvalp,
* Returns 0 on success.
*/
int proc_dointvec_minmax(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
struct do_proc_dointvec_minmax_conv_param param = {
.min = (int *) table->extra1,
@@ -2567,6 +2578,7 @@ static int do_proc_doulongvec_minmax(struct ctl_table *table, int write,
* @buffer: the user buffer
* @lenp: the size of the user buffer
* @ppos: file position
+ * @cookie: ignored by this handler
*
* Reads/writes up to table->maxlen/sizeof(unsigned long) unsigned long
* values from/to the user buffer, treated as an ASCII string.
@@ -2577,7 +2589,8 @@ static int do_proc_doulongvec_minmax(struct ctl_table *table, int write,
* Returns 0 on success.
*/
int proc_doulongvec_minmax(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
return do_proc_doulongvec_minmax(table, write, buffer, lenp, ppos, 1l, 1l);
}
@@ -2589,6 +2602,7 @@ int proc_doulongvec_minmax(struct ctl_table *table, int write,
* @buffer: the user buffer
* @lenp: the size of the user buffer
* @ppos: file position
+ * @cookie: ignored by this handler
*
* Reads/writes up to table->maxlen/sizeof(unsigned long) unsigned long
* values from/to the user buffer, treated as an ASCII string. The values
@@ -2600,8 +2614,8 @@ int proc_doulongvec_minmax(struct ctl_table *table, int write,
* Returns 0 on success.
*/
int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
return do_proc_doulongvec_minmax(table, write, buffer,
lenp, ppos, HZ, 1000l);
@@ -2682,6 +2696,7 @@ static int do_proc_dointvec_ms_jiffies_conv(bool *negp, unsigned long *lvalp,
* @buffer: the user buffer
* @lenp: the size of the user buffer
* @ppos: file position
+ * @cookie: ignored by this handler
*
* Reads/writes up to table->maxlen/sizeof(unsigned int) integer
* values from/to the user buffer, treated as an ASCII string.
@@ -2691,7 +2706,8 @@ static int do_proc_dointvec_ms_jiffies_conv(bool *negp, unsigned long *lvalp,
* Returns 0 on success.
*/
int proc_dointvec_jiffies(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
return do_proc_dointvec(table,write,buffer,lenp,ppos,
do_proc_dointvec_jiffies_conv,NULL);
@@ -2703,7 +2719,8 @@ int proc_dointvec_jiffies(struct ctl_table *table, int write,
* @write: %TRUE if this is a write to the sysctl file
* @buffer: the user buffer
* @lenp: the size of the user buffer
- * @ppos: pointer to the file position
+ * @ppos: file position
+ * @cookie: ignored by this handler
*
* Reads/writes up to table->maxlen/sizeof(unsigned int) integer
* values from/to the user buffer, treated as an ASCII string.
@@ -2713,7 +2730,8 @@ int proc_dointvec_jiffies(struct ctl_table *table, int write,
* Returns 0 on success.
*/
int proc_dointvec_userhz_jiffies(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
return do_proc_dointvec(table,write,buffer,lenp,ppos,
do_proc_dointvec_userhz_jiffies_conv,NULL);
@@ -2726,7 +2744,7 @@ int proc_dointvec_userhz_jiffies(struct ctl_table *table, int write,
* @buffer: the user buffer
* @lenp: the size of the user buffer
* @ppos: file position
- * @ppos: the current position in the file
+ * @cookie: ignored by this handler
*
* Reads/writes up to table->maxlen/sizeof(unsigned int) integer
* values from/to the user buffer, treated as an ASCII string.
@@ -2736,14 +2754,16 @@ int proc_dointvec_userhz_jiffies(struct ctl_table *table, int write,
* Returns 0 on success.
*/
int proc_dointvec_ms_jiffies(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
return do_proc_dointvec(table, write, buffer, lenp, ppos,
do_proc_dointvec_ms_jiffies_conv, NULL);
}
static int proc_do_cad_pid(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
struct pid *new_pid;
pid_t tmp;
@@ -2771,6 +2791,7 @@ static int proc_do_cad_pid(struct ctl_table *table, int write,
* @buffer: the user buffer
* @lenp: the size of the user buffer
* @ppos: file position
+ * @cookie: ignored by this handler
*
* The bitmap is stored at table->data and the bitmap length (in bits)
* in table->maxlen.
@@ -2782,7 +2803,8 @@ static int proc_do_cad_pid(struct ctl_table *table, int write,
* Returns 0 on success.
*/
int proc_do_large_bitmap(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
int err = 0;
bool first = 1;
@@ -2918,50 +2940,57 @@ int proc_do_large_bitmap(struct ctl_table *table, int write,
#else /* CONFIG_PROC_SYSCTL */
int proc_dostring(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
return -ENOSYS;
}
int proc_dointvec(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
return -ENOSYS;
}
int proc_dointvec_minmax(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
return -ENOSYS;
}
int proc_dointvec_jiffies(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
return -ENOSYS;
}
int proc_dointvec_userhz_jiffies(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
return -ENOSYS;
}
int proc_dointvec_ms_jiffies(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
return -ENOSYS;
}
int proc_doulongvec_minmax(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
return -ENOSYS;
}
int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
return -ENOSYS;
}
@@ -3178,7 +3178,7 @@ int unregister_ftrace_function(struct ftrace_ops *ops)
int
ftrace_enable_sysctl(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp,
- loff_t *ppos)
+ loff_t *ppos, void *cookie)
{
int ret;
@@ -3187,7 +3187,7 @@ ftrace_enable_sysctl(struct ctl_table *table, int write,
mutex_lock(&ftrace_lock);
- ret = proc_dointvec(table, write, buffer, lenp, ppos);
+ ret = proc_dointvec(table, write, buffer, lenp, ppos, NULL);
if (ret || !write || (last_ftrace_enabled == !!ftrace_enabled))
goto out;
@@ -322,13 +322,13 @@ static const struct file_operations stack_trace_fops = {
int
stack_trace_sysctl(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp,
- loff_t *ppos)
+ loff_t *ppos, void *cookie)
{
int ret;
mutex_lock(&stack_sysctl_mutex);
- ret = proc_dointvec(table, write, buffer, lenp, ppos);
+ ret = proc_dointvec(table, write, buffer, lenp, ppos, NULL);
if (ret || !write ||
(last_stack_tracer_enabled == !!stack_tracer_enabled))
@@ -42,14 +42,14 @@ static void put_uts(ctl_table *table, int write, void *which)
* Special case of dostring for the UTS structure. This has locks
* to observe. Should this be in kernel/sys.c ????
*/
-static int proc_do_uts_string(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+static int proc_do_uts_string(ctl_table *table, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
struct ctl_table uts_table;
int r;
memcpy(&uts_table, table, sizeof(uts_table));
uts_table.data = get_uts(table, write);
- r = proc_dostring(&uts_table,write,buffer,lenp, ppos);
+ r = proc_dostring(&uts_table,write,buffer,lenp, ppos, NULL);
put_uts(table, write, uts_table.data);
return r;
}
@@ -502,9 +502,10 @@ static void watchdog_disable_all_cpus(void)
*/
int proc_dowatchdog_enabled(struct ctl_table *table, int write,
- void __user *buffer, size_t *length, loff_t *ppos)
+ void __user *buffer, size_t *length,
+ loff_t *ppos, void *cookie)
{
- proc_dointvec(table, write, buffer, length, ppos);
+ proc_dointvec(table, write, buffer, length, ppos, NULL);
if (write) {
if (watchdog_enabled)
@@ -516,10 +517,10 @@ int proc_dowatchdog_enabled(struct ctl_table *table, int write,
}
int proc_dowatchdog_thresh(struct ctl_table *table, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
- return proc_dointvec_minmax(table, write, buffer, lenp, ppos);
+ return proc_dointvec_minmax(table, write, buffer, lenp, ppos, NULL);
}
#endif /* CONFIG_SYSCTL */
@@ -676,7 +676,8 @@ int sysctl_compact_memory;
/* This is the entry point for compacting all nodes via /proc/sys/vm */
int sysctl_compaction_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *length, loff_t *ppos)
+ void __user *buffer, size_t *length,
+ loff_t *ppos, void *cookie)
{
if (write)
return compact_nodes();
@@ -685,9 +686,10 @@ int sysctl_compaction_handler(struct ctl_table *table, int write,
}
int sysctl_extfrag_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *length, loff_t *ppos)
+ void __user *buffer, size_t *length,
+ loff_t *ppos, void *cookie)
{
- proc_dointvec_minmax(table, write, buffer, length, ppos);
+ proc_dointvec_minmax(table, write, buffer, length, ppos, NULL);
return 0;
}
@@ -1879,7 +1879,7 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy,
table->data = &tmp;
table->maxlen = sizeof(unsigned long);
- ret = proc_doulongvec_minmax(table, write, buffer, length, ppos);
+ ret = proc_doulongvec_minmax(table, write, buffer, length, ppos, NULL);
if (ret)
goto out;
@@ -1901,27 +1901,29 @@ out:
}
int hugetlb_sysctl_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *length, loff_t *ppos)
+ void __user *buffer, size_t *length,
+ loff_t *ppos, void *cookie)
{
return hugetlb_sysctl_handler_common(false, table, write,
- buffer, length, ppos);
+ buffer, length, ppos);
}
#ifdef CONFIG_NUMA
int hugetlb_mempolicy_sysctl_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *length, loff_t *ppos)
+ void __user *buffer, size_t *length,
+ loff_t *ppos, void *cookie)
{
return hugetlb_sysctl_handler_common(true, table, write,
- buffer, length, ppos);
+ buffer, length, ppos);
}
#endif /* CONFIG_NUMA */
int hugetlb_treat_movable_handler(struct ctl_table *table, int write,
- void __user *buffer,
- size_t *length, loff_t *ppos)
+ void __user *buffer, size_t *length,
+ loff_t *ppos, void *cookie)
{
- proc_dointvec(table, write, buffer, length, ppos);
+ proc_dointvec(table, write, buffer, length, ppos, NULL);
if (hugepages_treat_as_movable)
htlb_alloc_mask = GFP_HIGHUSER_MOVABLE;
else
@@ -1930,8 +1932,8 @@ int hugetlb_treat_movable_handler(struct ctl_table *table, int write,
}
int hugetlb_overcommit_handler(struct ctl_table *table, int write,
- void __user *buffer,
- size_t *length, loff_t *ppos)
+ void __user *buffer, size_t *length,
+ loff_t *ppos, void *cookie)
{
struct hstate *h = &default_hstate;
unsigned long tmp;
@@ -1944,7 +1946,7 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write,
table->data = &tmp;
table->maxlen = sizeof(unsigned long);
- ret = proc_doulongvec_minmax(table, write, buffer, length, ppos);
+ ret = proc_doulongvec_minmax(table, write, buffer, length, ppos, NULL);
if (ret)
goto out;
@@ -159,37 +159,34 @@ static void update_completion_period(void)
}
int dirty_background_ratio_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp,
- loff_t *ppos)
+ void __user *buffer, size_t *lenp, loff_t *ppos, void *cookie)
{
int ret;
- ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
+ ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos, NULL);
if (ret == 0 && write)
dirty_background_bytes = 0;
return ret;
}
int dirty_background_bytes_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp,
- loff_t *ppos)
+ void __user *buffer, size_t *lenp, loff_t *ppos, void *cookie)
{
int ret;
- ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos);
+ ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos, NULL);
if (ret == 0 && write)
dirty_background_ratio = 0;
return ret;
}
int dirty_ratio_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp,
- loff_t *ppos)
+ void __user *buffer, size_t *lenp, loff_t *ppos, void *cookie)
{
int old_ratio = vm_dirty_ratio;
int ret;
- ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
+ ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos, NULL);
if (ret == 0 && write && vm_dirty_ratio != old_ratio) {
update_completion_period();
vm_dirty_bytes = 0;
@@ -199,13 +196,12 @@ int dirty_ratio_handler(struct ctl_table *table, int write,
int dirty_bytes_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp,
- loff_t *ppos)
+ void __user *buffer, size_t *lenp, loff_t *ppos, void *cookie)
{
unsigned long old_bytes = vm_dirty_bytes;
int ret;
- ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos);
+ ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos, NULL);
if (ret == 0 && write && vm_dirty_bytes != old_bytes) {
update_completion_period();
vm_dirty_ratio = 0;
@@ -684,9 +680,9 @@ void throttle_vm_writeout(gfp_t gfp_mask)
* sysctl handler for /proc/sys/vm/dirty_writeback_centisecs
*/
int dirty_writeback_centisecs_handler(ctl_table *table, int write,
- void __user *buffer, size_t *length, loff_t *ppos)
+ void __user *buffer, size_t *lenp, loff_t *ppos, void *cookie)
{
- proc_dointvec(table, write, buffer, length, ppos);
+ proc_dointvec(table, write, buffer, lenp, ppos, NULL);
bdi_arm_supers_timer();
return 0;
}
@@ -2721,8 +2721,7 @@ early_param("numa_zonelist_order", setup_numa_zonelist_order);
* sysctl handler for numa_zonelist_order
*/
int numa_zonelist_order_handler(ctl_table *table, int write,
- void __user *buffer, size_t *length,
- loff_t *ppos)
+ void __user *buffer, size_t *length, loff_t *ppos, void *cookie)
{
char saved_string[NUMA_ZONELIST_ORDER_LEN];
int ret;
@@ -2731,7 +2730,7 @@ int numa_zonelist_order_handler(ctl_table *table, int write,
mutex_lock(&zl_order_mutex);
if (write)
strcpy(saved_string, (char*)table->data);
- ret = proc_dostring(table, write, buffer, length, ppos);
+ ret = proc_dostring(table, write, buffer, length, ppos, NULL);
if (ret)
goto out;
if (write) {
@@ -5142,9 +5141,9 @@ module_init(init_per_zone_wmark_min)
* changes.
*/
int min_free_kbytes_sysctl_handler(ctl_table *table, int write,
- void __user *buffer, size_t *length, loff_t *ppos)
+ void __user *buffer, size_t *length, loff_t *ppos, void *cookie)
{
- proc_dointvec(table, write, buffer, length, ppos);
+ proc_dointvec(table, write, buffer, length, ppos, NULL);
if (write)
setup_per_zone_wmarks();
return 0;
@@ -5152,12 +5151,12 @@ int min_free_kbytes_sysctl_handler(ctl_table *table, int write,
#ifdef CONFIG_NUMA
int sysctl_min_unmapped_ratio_sysctl_handler(ctl_table *table, int write,
- void __user *buffer, size_t *length, loff_t *ppos)
+ void __user *buffer, size_t *length, loff_t *ppos, void *cookie)
{
struct zone *zone;
int rc;
- rc = proc_dointvec_minmax(table, write, buffer, length, ppos);
+ rc = proc_dointvec_minmax(table, write, buffer, length, ppos, NULL);
if (rc)
return rc;
@@ -5168,12 +5167,12 @@ int sysctl_min_unmapped_ratio_sysctl_handler(ctl_table *table, int write,
}
int sysctl_min_slab_ratio_sysctl_handler(ctl_table *table, int write,
- void __user *buffer, size_t *length, loff_t *ppos)
+ void __user *buffer, size_t *length, loff_t *ppos, void *cookie)
{
struct zone *zone;
int rc;
- rc = proc_dointvec_minmax(table, write, buffer, length, ppos);
+ rc = proc_dointvec_minmax(table, write, buffer, length, ppos, NULL);
if (rc)
return rc;
@@ -5194,9 +5193,9 @@ int sysctl_min_slab_ratio_sysctl_handler(ctl_table *table, int write,
* if in function of the boot time zone sizes.
*/
int lowmem_reserve_ratio_sysctl_handler(ctl_table *table, int write,
- void __user *buffer, size_t *length, loff_t *ppos)
+ void __user *buffer, size_t *length, loff_t *ppos, void *cookie)
{
- proc_dointvec_minmax(table, write, buffer, length, ppos);
+ proc_dointvec_minmax(table, write, buffer, length, ppos, NULL);
setup_per_zone_lowmem_reserve();
return 0;
}
@@ -5208,13 +5207,13 @@ int lowmem_reserve_ratio_sysctl_handler(ctl_table *table, int write,
*/
int percpu_pagelist_fraction_sysctl_handler(ctl_table *table, int write,
- void __user *buffer, size_t *length, loff_t *ppos)
+ void __user *buffer, size_t *length, loff_t *ppos, void *cookie)
{
struct zone *zone;
unsigned int cpu;
int ret;
- ret = proc_dointvec_minmax(table, write, buffer, length, ppos);
+ ret = proc_dointvec_minmax(table, write, buffer, length, ppos, NULL);
if (!write || (ret == -EINVAL))
return ret;
for_each_populated_zone(zone) {
@@ -3273,10 +3273,10 @@ static void scan_all_zones_unevictable_pages(void)
unsigned long scan_unevictable_pages;
int scan_unevictable_handler(struct ctl_table *table, int write,
- void __user *buffer,
- size_t *length, loff_t *ppos)
+ void __user *buffer, size_t *length,
+ loff_t *ppos, void *cookie)
{
- proc_doulongvec_minmax(table, write, buffer, length, ppos);
+ proc_doulongvec_minmax(table, write, buffer, length, ppos, NULL);
if (write && *(unsigned long *)table->data)
scan_all_zones_unevictable_pages();
@@ -932,12 +932,12 @@ static struct nf_hook_ops br_nf_ops[] __read_mostly = {
#ifdef CONFIG_SYSCTL
static
-int brnf_sysctl_call_tables(ctl_table * ctl, int write,
- void __user * buffer, size_t * lenp, loff_t * ppos)
+int brnf_sysctl_call_tables(ctl_table * ctl, int write, void __user * buffer,
+ size_t * lenp, loff_t * ppos, void * cookie)
{
int ret;
- ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
+ ret = proc_dointvec(ctl, write, buffer, lenp, ppos, NULL);
if (write && *(int *)(ctl->data))
*(int *)(ctl->data) = 1;
@@ -20,7 +20,8 @@
#ifdef CONFIG_RPS
static int rps_sock_flow_sysctl(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
unsigned int orig_size, size;
int ret, i;
@@ -38,7 +39,7 @@ static int rps_sock_flow_sysctl(ctl_table *table, int write,
lockdep_is_held(&sock_flow_mutex));
size = orig_size = orig_sock_table ? orig_sock_table->mask + 1 : 0;
- ret = proc_dointvec(&tmp, write, buffer, lenp, ppos);
+ ret = proc_dointvec(&tmp, write, buffer, lenp, ppos, NULL);
if (write) {
if (size) {
@@ -159,8 +159,8 @@ static int max_t3[] = { 8191 }; /* Must fit in 16 bits when multiplied by BCT3MU
static int min_priority[1];
static int max_priority[] = { 127 }; /* From DECnet spec */
-static int dn_forwarding_proc(ctl_table *, int,
- void __user *, size_t *, loff_t *);
+static int dn_forwarding_proc(ctl_table *, int, void __user *,
+ size_t *, loff_t *, void *);
static struct dn_dev_sysctl_table {
struct ctl_table_header *sysctl_header;
ctl_table dn_dev_vars[5];
@@ -255,8 +255,8 @@ static void dn_dev_sysctl_unregister(struct dn_dev_parms *parms)
}
static int dn_forwarding_proc(ctl_table *table, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
#ifdef CONFIG_DECNET_ROUTER
struct net_device *dev = table->extra1;
@@ -270,7 +270,7 @@ static int dn_forwarding_proc(ctl_table *table, int write,
dn_db = rcu_dereference_raw(dev->dn_ptr);
old = dn_db->parms.forwarding;
- err = proc_dointvec(table, write, buffer, lenp, ppos);
+ err = proc_dointvec(table, write, buffer, lenp, ppos, NULL);
if ((err >= 0) && write) {
if (dn_db->parms.forwarding < 0)
@@ -132,8 +132,8 @@ static int parse_addr(__le16 *addr, char *str)
}
static int dn_node_address_handler(ctl_table *table, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
char addr[DN_ASCBUF_LEN];
size_t len;
@@ -183,8 +183,8 @@ static int dn_node_address_handler(ctl_table *table, int write,
}
static int dn_def_dev_handler(ctl_table *table, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
size_t len;
struct net_device *dev;
@@ -1487,10 +1487,10 @@ static void inet_forward_change(struct net *net)
}
static int devinet_conf_proc(ctl_table *ctl, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
- int ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
+ int ret = proc_dointvec(ctl, write, buffer, lenp, ppos, NULL);
if (write) {
struct ipv4_devconf *cnf = ctl->extra1;
@@ -1507,13 +1507,13 @@ static int devinet_conf_proc(ctl_table *ctl, int write,
}
static int devinet_sysctl_forward(ctl_table *ctl, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
int *valp = ctl->data;
int val = *valp;
loff_t pos = *ppos;
- int ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
+ int ret = proc_dointvec(ctl, write, buffer, lenp, ppos, NULL);
if (write && *valp != val) {
struct net *net = ctl->extra2;
@@ -1542,12 +1542,12 @@ static int devinet_sysctl_forward(ctl_table *ctl, int write,
}
static int ipv4_doint_and_flush(ctl_table *ctl, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
int *valp = ctl->data;
int val = *valp;
- int ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
+ int ret = proc_dointvec(ctl, write, buffer, lenp, ppos, NULL);
struct net *net = ctl->extra2;
if (write && *valp != val)
@@ -3009,8 +3009,8 @@ void ip_rt_multicast_event(struct in_device *in_dev)
#ifdef CONFIG_SYSCTL
static int ipv4_sysctl_rtcache_flush(ctl_table *__ctl, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
if (write) {
int flush_delay;
@@ -3019,7 +3019,7 @@ static int ipv4_sysctl_rtcache_flush(ctl_table *__ctl, int write,
memcpy(&ctl, __ctl, sizeof(ctl));
ctl.data = &flush_delay;
- proc_dointvec(&ctl, write, buffer, lenp, ppos);
+ proc_dointvec(&ctl, write, buffer, lenp, ppos, NULL);
net = (struct net *)__ctl->extra1;
rt_cache_flush(net, flush_delay);
@@ -42,8 +42,8 @@ static void set_local_port_range(int range[2])
/* Validate changes from /proc interface. */
static int ipv4_local_port_range(ctl_table *table, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
int ret;
int range[2];
@@ -56,7 +56,7 @@ static int ipv4_local_port_range(ctl_table *table, int write,
};
inet_get_local_port_range(range, range + 1);
- ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
+ ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos, NULL);
if (write && ret == 0) {
if (range[1] < range[0])
@@ -69,7 +69,8 @@ static int ipv4_local_port_range(ctl_table *table, int write,
}
static int proc_tcp_congestion_control(ctl_table *ctl, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
char val[TCP_CA_NAME_MAX];
ctl_table tbl = {
@@ -80,16 +81,15 @@ static int proc_tcp_congestion_control(ctl_table *ctl, int write,
tcp_get_default_congestion_control(val);
- ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
+ ret = proc_dostring(&tbl, write, buffer, lenp, ppos, NULL);
if (write && ret == 0)
ret = tcp_set_default_congestion_control(val);
return ret;
}
-static int proc_tcp_available_congestion_control(ctl_table *ctl,
- int write,
+static int proc_tcp_available_congestion_control(ctl_table *ctl, int write,
void __user *buffer, size_t *lenp,
- loff_t *ppos)
+ loff_t *ppos, void *cookie)
{
ctl_table tbl = { .maxlen = TCP_CA_BUF_MAX, };
int ret;
@@ -98,15 +98,14 @@ static int proc_tcp_available_congestion_control(ctl_table *ctl,
if (!tbl.data)
return -ENOMEM;
tcp_get_available_congestion_control(tbl.data, TCP_CA_BUF_MAX);
- ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
+ ret = proc_dostring(&tbl, write, buffer, lenp, ppos, NULL);
kfree(tbl.data);
return ret;
}
-static int proc_allowed_congestion_control(ctl_table *ctl,
- int write,
+static int proc_allowed_congestion_control(ctl_table *ctl, int write,
void __user *buffer, size_t *lenp,
- loff_t *ppos)
+ loff_t *ppos, void *cookie)
{
ctl_table tbl = { .maxlen = TCP_CA_BUF_MAX };
int ret;
@@ -116,7 +115,7 @@ static int proc_allowed_congestion_control(ctl_table *ctl,
return -ENOMEM;
tcp_get_allowed_congestion_control(tbl.data, tbl.maxlen);
- ret = proc_dostring(&tbl, write, buffer, lenp, ppos);
+ ret = proc_dostring(&tbl, write, buffer, lenp, ppos, NULL);
if (write && ret == 0)
ret = tcp_set_allowed_congestion_control(tbl.data);
kfree(tbl.data);
@@ -4156,15 +4156,15 @@ static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
#ifdef CONFIG_SYSCTL
static
-int addrconf_sysctl_forward(ctl_table *ctl, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+int addrconf_sysctl_forward(ctl_table *ctl, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
int *valp = ctl->data;
int val = *valp;
loff_t pos = *ppos;
int ret;
- ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
+ ret = proc_dointvec(ctl, write, buffer, lenp, ppos, NULL);
if (write)
ret = addrconf_fixup_forwarding(ctl, valp, val);
@@ -4229,15 +4229,15 @@ static int addrconf_disable_ipv6(struct ctl_table *table, int *p, int old)
}
static
-int addrconf_sysctl_disable(ctl_table *ctl, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+int addrconf_sysctl_disable(ctl_table *ctl, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
int *valp = ctl->data;
int val = *valp;
loff_t pos = *ppos;
int ret;
- ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
+ ret = proc_dointvec(ctl, write, buffer, lenp, ppos, NULL);
if (write)
ret = addrconf_disable_ipv6(ctl, valp, val);
@@ -1751,7 +1751,9 @@ static void ndisc_warn_deprecated_sysctl(struct ctl_table *ctl,
}
}
-int ndisc_ifinfo_sysctl_change(struct ctl_table *ctl, int write, void __user *buffer, size_t *lenp, loff_t *ppos)
+int ndisc_ifinfo_sysctl_change(struct ctl_table *ctl, int write,
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
struct net_device *dev = ctl->extra1;
struct inet6_dev *idev;
@@ -1762,16 +1764,16 @@ int ndisc_ifinfo_sysctl_change(struct ctl_table *ctl, int write, void __user *bu
ndisc_warn_deprecated_sysctl(ctl, "syscall", dev ? dev->name : "default");
if (strcmp(ctl->procname, "retrans_time") == 0)
- ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
+ ret = proc_dointvec(ctl, write, buffer, lenp, ppos, NULL);
else if (strcmp(ctl->procname, "base_reachable_time") == 0)
- ret = proc_dointvec_jiffies(ctl, write,
- buffer, lenp, ppos);
+ ret = proc_dointvec_jiffies(ctl, write, buffer,
+ lenp, ppos, NULL);
else if ((strcmp(ctl->procname, "retrans_time_ms") == 0) ||
(strcmp(ctl->procname, "base_reachable_time_ms") == 0))
- ret = proc_dointvec_ms_jiffies(ctl, write,
- buffer, lenp, ppos);
+ ret = proc_dointvec_ms_jiffies(ctl, write, buffer,
+ lenp, ppos, NULL);
else
ret = -1;
@@ -2593,8 +2593,8 @@ static const struct file_operations rt6_stats_seq_fops = {
#ifdef CONFIG_SYSCTL
static
-int ipv6_sysctl_rtcache_flush(ctl_table *ctl, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+int ipv6_sysctl_rtcache_flush(ctl_table *ctl, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
struct net *net;
int delay;
@@ -2603,7 +2603,7 @@ int ipv6_sysctl_rtcache_flush(ctl_table *ctl, int write,
net = (struct net *)ctl->extra1;
delay = net->ipv6.sysctl.flush_delay;
- proc_dointvec(ctl, write, buffer, lenp, ppos);
+ proc_dointvec(ctl, write, buffer, lenp, ppos, NULL);
fib6_run_gc(delay <= 0 ? ~0UL : (unsigned long)delay, net);
return 0;
}
@@ -73,12 +73,12 @@ static int min_lap_keepalive_time = 100; /* 100us */
/* For other sysctl, I've no idea of the range. Maybe Dag could help
* us on that - Jean II */
-static int do_devname(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+static int do_devname(ctl_table *table, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
int ret;
- ret = proc_dostring(table, write, buffer, lenp, ppos);
+ ret = proc_dostring(table, write, buffer, lenp, ppos, NULL);
if (ret == 0 && write) {
struct ias_value *val;
@@ -90,12 +90,12 @@ static int do_devname(ctl_table *table, int write,
}
-static int do_discovery(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+static int do_discovery(ctl_table *table, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
int ret;
- ret = proc_dointvec(table, write, buffer, lenp, ppos);
+ ret = proc_dointvec(table, write, buffer, lenp, ppos, NULL);
if (ret)
return ret;
@@ -1514,15 +1514,15 @@ static int ip_vs_zero_all(struct net *net)
#ifdef CONFIG_SYSCTL
static int
-proc_do_defense_mode(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+proc_do_defense_mode(ctl_table *table, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
struct net *net = current->nsproxy->net_ns;
int *valp = table->data;
int val = *valp;
int rc;
- rc = proc_dointvec(table, write, buffer, lenp, ppos);
+ rc = proc_dointvec(table, write, buffer, lenp, ppos, NULL);
if (write && (*valp != val)) {
if ((*valp < 0) || (*valp > 3)) {
/* Restore the correct value */
@@ -1535,8 +1535,8 @@ proc_do_defense_mode(ctl_table *table, int write,
}
static int
-proc_do_sync_threshold(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+proc_do_sync_threshold(ctl_table *table, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
int *valp = table->data;
int val[2];
@@ -1545,7 +1545,7 @@ proc_do_sync_threshold(ctl_table *table, int write,
/* backup the value first */
memcpy(val, valp, sizeof(val));
- rc = proc_dointvec(table, write, buffer, lenp, ppos);
+ rc = proc_dointvec(table, write, buffer, lenp, ppos, NULL);
if (write && (valp[0] < 0 || valp[1] < 0 || valp[0] >= valp[1])) {
/* Restore the correct value */
memcpy(valp, val, sizeof(val));
@@ -226,7 +226,8 @@ static struct ctl_table nf_log_sysctl_table[NFPROTO_NUMPROTO+1];
static struct ctl_table_header *nf_log_dir_header;
static int nf_log_proc_dostring(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
const struct nf_logger *logger;
char buf[NFLOGGER_NAME_LEN];
@@ -260,7 +261,7 @@ static int nf_log_proc_dostring(ctl_table *table, int write,
table->data = "NONE";
else
table->data = logger->name;
- r = proc_dostring(table, write, buffer, lenp, ppos);
+ r = proc_dostring(table, write, buffer, lenp, ppos, NULL);
mutex_unlock(&nf_log_mutex);
}
@@ -57,8 +57,8 @@ void phonet_get_local_port_range(int *min, int *max)
}
static int proc_local_port_range(ctl_table *table, int write,
- void __user *buffer,
- size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
int ret;
int range[2] = {local_port_range[0], local_port_range[1]};
@@ -70,7 +70,7 @@ static int proc_local_port_range(ctl_table *table, int write,
.extra2 = &local_port_range_max,
};
- ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
+ ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos, NULL);
if (write && ret == 0) {
if (range[1] < range[0])
@@ -56,8 +56,8 @@ rpc_unregister_sysctl(void)
}
}
-static int proc_do_xprt(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+static int proc_do_xprt(ctl_table *table, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
char tmpbuf[256];
size_t len;
@@ -70,9 +70,8 @@ static int proc_do_xprt(ctl_table *table, int write,
return simple_read_from_buffer(buffer, *lenp, ppos, tmpbuf, len);
}
-static int
-proc_dodebug(ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+static int proc_dodebug(ctl_table *table, int write, void __user *buffer,
+ size_t *lenp, loff_t *ppos, void *cookie)
{
char tmpbuf[20], c, *s;
char __user *p;
@@ -85,7 +85,7 @@ struct workqueue_struct *svc_rdma_wq;
*/
static int read_reset_stat(ctl_table *table, int write,
void __user *buffer, size_t *lenp,
- loff_t *ppos)
+ loff_t *ppos, void *cookie)
{
atomic_t *stat = (atomic_t *)table->data;
@@ -29,14 +29,15 @@ static void update_mmap_min_addr(void)
* calls update_mmap_min_addr() so non MAP_FIXED hints get rounded properly
*/
int mmap_min_addr_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos, void *cookie)
{
int ret;
if (write && !capable(CAP_SYS_RAWIO))
return -EPERM;
- ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos);
+ ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos, NULL);
update_mmap_min_addr();
The bulk of this patch changes all proc_handlers in the kernel to receive the cookie. Signed-off-by: Lucian Adrian Grijincu <lucian.grijincu@gmail.com> --- arch/frv/kernel/pm.c | 22 ++++---- arch/frv/kernel/sysctl.c | 4 +- arch/mips/lasat/sysctl.c | 28 ++++++------ arch/s390/appldata/appldata_base.c | 15 +++--- arch/s390/kernel/debug.c | 6 +- arch/s390/mm/cmm.c | 4 +- drivers/cdrom/cdrom.c | 12 ++-- drivers/char/random.c | 6 +- drivers/macintosh/mac_hid.c | 4 +- drivers/parport/procfs.c | 29 +++++------ drivers/s390/char/sclp_async.c | 2 +- fs/dcache.c | 4 +- fs/drop_caches.c | 5 +- fs/file_table.c | 10 ++-- fs/fscache/main.c | 6 +- fs/inode.c | 6 +- fs/pipe.c | 4 +- fs/proc/proc_sysctl.c | 3 +- fs/quota/dquot.c | 5 +- fs/xfs/linux-2.6/xfs_sysctl.c | 10 ++-- include/linux/compaction.h | 6 ++- include/linux/fs.h | 12 ++-- include/linux/ftrace.h | 4 +- include/linux/hugetlb.h | 13 +++-- include/linux/kprobes.h | 6 +- include/linux/mm.h | 4 +- include/linux/mmzone.h | 23 +++++---- include/linux/nmi.h | 4 +- include/linux/perf_event.h | 2 +- include/linux/pipe_fs_i.h | 2 +- include/linux/sched.h | 16 +++--- include/linux/security.h | 3 +- include/linux/swap.h | 4 +- include/linux/sysctl.h | 30 ++++++++---- include/linux/writeback.h | 18 ++----- include/net/ndisc.h | 7 ++- ipc/ipc_sysctl.c | 21 +++++---- ipc/mq_sysctl.c | 11 ++-- kernel/hung_task.c | 6 +- kernel/kprobes.c | 4 +- kernel/perf_event.c | 4 +- kernel/sched.c | 4 +- kernel/sched_fair.c | 4 +- kernel/sysctl.c | 91 +++++++++++++++++++++++------------ kernel/trace/ftrace.c | 4 +- kernel/trace/trace_stack.c | 4 +- kernel/utsname_sysctl.c | 6 +- kernel/watchdog.c | 11 ++-- mm/compaction.c | 8 ++- mm/hugetlb.c | 24 +++++---- mm/page-writeback.c | 24 ++++------ mm/page_alloc.c | 25 +++++----- mm/vmscan.c | 6 +- net/bridge/br_netfilter.c | 6 +- net/core/sysctl_net_core.c | 5 +- net/decnet/dn_dev.c | 10 ++-- net/decnet/sysctl_net_decnet.c | 8 ++-- net/ipv4/devinet.c | 18 ++++---- net/ipv4/route.c | 6 +- net/ipv4/sysctl_net_ipv4.c | 25 +++++----- net/ipv6/addrconf.c | 12 ++-- net/ipv6/ndisc.c | 14 +++-- net/ipv6/route.c | 6 +- net/irda/irsysctl.c | 12 ++-- net/netfilter/ipvs/ip_vs_ctl.c | 12 ++-- net/netfilter/nf_log.c | 5 +- net/phonet/sysctl.c | 6 +- net/sunrpc/sysctl.c | 9 ++-- net/sunrpc/xprtrdma/svc_rdma.c | 2 +- security/min_addr.c | 5 +- 70 files changed, 405 insertions(+), 352 deletions(-)