|
@@ -2140,6 +2140,21 @@ static int do_proc_dointvec_conv(bool *negp, unsigned long *lvalp,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int do_proc_douintvec_conv(bool *negp, unsigned long *lvalp,
|
|
|
+ int *valp,
|
|
|
+ int write, void *data)
|
|
|
+{
|
|
|
+ if (write) {
|
|
|
+ if (*negp)
|
|
|
+ return -EINVAL;
|
|
|
+ *valp = *lvalp;
|
|
|
+ } else {
|
|
|
+ unsigned int val = *valp;
|
|
|
+ *lvalp = (unsigned long)val;
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static const char proc_wspace_sep[] = { ' ', '\t', '\n' };
|
|
|
|
|
|
static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table,
|
|
@@ -2259,8 +2274,27 @@ static int do_proc_dointvec(struct ctl_table *table, int write,
|
|
|
int proc_dointvec(struct ctl_table *table, int write,
|
|
|
void __user *buffer, size_t *lenp, loff_t *ppos)
|
|
|
{
|
|
|
- return do_proc_dointvec(table,write,buffer,lenp,ppos,
|
|
|
- NULL,NULL);
|
|
|
+ return do_proc_dointvec(table, write, buffer, lenp, ppos, NULL, NULL);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * proc_douintvec - read a vector of unsigned integers
|
|
|
+ * @table: the sysctl table
|
|
|
+ * @write: %TRUE if this is a write to the sysctl file
|
|
|
+ * @buffer: the user buffer
|
|
|
+ * @lenp: the size of the user buffer
|
|
|
+ * @ppos: file position
|
|
|
+ *
|
|
|
+ * Reads/writes up to table->maxlen/sizeof(unsigned int) unsigned integer
|
|
|
+ * values from/to the user buffer, treated as an ASCII string.
|
|
|
+ *
|
|
|
+ * Returns 0 on success.
|
|
|
+ */
|
|
|
+int proc_douintvec(struct ctl_table *table, int write,
|
|
|
+ void __user *buffer, size_t *lenp, loff_t *ppos)
|
|
|
+{
|
|
|
+ return do_proc_dointvec(table, write, buffer, lenp, ppos,
|
|
|
+ do_proc_douintvec_conv, NULL);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -2858,6 +2892,12 @@ int proc_dointvec(struct ctl_table *table, int write,
|
|
|
return -ENOSYS;
|
|
|
}
|
|
|
|
|
|
+int proc_douintvec(struct ctl_table *table, int write,
|
|
|
+ void __user *buffer, size_t *lenp, loff_t *ppos)
|
|
|
+{
|
|
|
+ return -ENOSYS;
|
|
|
+}
|
|
|
+
|
|
|
int proc_dointvec_minmax(struct ctl_table *table, int write,
|
|
|
void __user *buffer, size_t *lenp, loff_t *ppos)
|
|
|
{
|
|
@@ -2903,6 +2943,7 @@ int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int write,
|
|
|
* exception granted :-)
|
|
|
*/
|
|
|
EXPORT_SYMBOL(proc_dointvec);
|
|
|
+EXPORT_SYMBOL(proc_douintvec);
|
|
|
EXPORT_SYMBOL(proc_dointvec_jiffies);
|
|
|
EXPORT_SYMBOL(proc_dointvec_minmax);
|
|
|
EXPORT_SYMBOL(proc_dointvec_userhz_jiffies);
|