|
@@ -66,6 +66,7 @@
|
|
#include <linux/kexec.h>
|
|
#include <linux/kexec.h>
|
|
#include <linux/bpf.h>
|
|
#include <linux/bpf.h>
|
|
#include <linux/mount.h>
|
|
#include <linux/mount.h>
|
|
|
|
+#include <linux/pipe_fs_i.h>
|
|
|
|
|
|
#include <linux/uaccess.h>
|
|
#include <linux/uaccess.h>
|
|
#include <asm/processor.h>
|
|
#include <asm/processor.h>
|
|
@@ -2620,6 +2621,47 @@ int proc_douintvec_minmax(struct ctl_table *table, int write,
|
|
do_proc_douintvec_minmax_conv, ¶m);
|
|
do_proc_douintvec_minmax_conv, ¶m);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+struct do_proc_dopipe_max_size_conv_param {
|
|
|
|
+ unsigned int *min;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static int do_proc_dopipe_max_size_conv(unsigned long *lvalp,
|
|
|
|
+ unsigned int *valp,
|
|
|
|
+ int write, void *data)
|
|
|
|
+{
|
|
|
|
+ struct do_proc_dopipe_max_size_conv_param *param = data;
|
|
|
|
+
|
|
|
|
+ if (write) {
|
|
|
|
+ unsigned int val = round_pipe_size(*lvalp);
|
|
|
|
+
|
|
|
|
+ if (val == 0)
|
|
|
|
+ return -EINVAL;
|
|
|
|
+
|
|
|
|
+ if (param->min && *param->min > val)
|
|
|
|
+ return -ERANGE;
|
|
|
|
+
|
|
|
|
+ if (*lvalp > UINT_MAX)
|
|
|
|
+ return -EINVAL;
|
|
|
|
+
|
|
|
|
+ *valp = val;
|
|
|
|
+ } else {
|
|
|
|
+ unsigned int val = *valp;
|
|
|
|
+ *lvalp = (unsigned long) val;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+int proc_dopipe_max_size(struct ctl_table *table, int write,
|
|
|
|
+ void __user *buffer, size_t *lenp, loff_t *ppos)
|
|
|
|
+{
|
|
|
|
+ struct do_proc_dopipe_max_size_conv_param param = {
|
|
|
|
+ .min = (unsigned int *) table->extra1,
|
|
|
|
+ };
|
|
|
|
+ return do_proc_douintvec(table, write, buffer, lenp, ppos,
|
|
|
|
+ do_proc_dopipe_max_size_conv, ¶m);
|
|
|
|
+}
|
|
|
|
+
|
|
static void validate_coredump_safety(void)
|
|
static void validate_coredump_safety(void)
|
|
{
|
|
{
|
|
#ifdef CONFIG_COREDUMP
|
|
#ifdef CONFIG_COREDUMP
|
|
@@ -3125,6 +3167,12 @@ int proc_douintvec_minmax(struct ctl_table *table, int write,
|
|
return -ENOSYS;
|
|
return -ENOSYS;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+int proc_dopipe_max_size(struct ctl_table *table, int write,
|
|
|
|
+ void __user *buffer, size_t *lenp, loff_t *ppos)
|
|
|
|
+{
|
|
|
|
+ return -ENOSYS;
|
|
|
|
+}
|
|
|
|
+
|
|
int proc_dointvec_jiffies(struct ctl_table *table, int write,
|
|
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)
|
|
{
|
|
{
|
|
@@ -3168,6 +3216,7 @@ EXPORT_SYMBOL(proc_douintvec);
|
|
EXPORT_SYMBOL(proc_dointvec_jiffies);
|
|
EXPORT_SYMBOL(proc_dointvec_jiffies);
|
|
EXPORT_SYMBOL(proc_dointvec_minmax);
|
|
EXPORT_SYMBOL(proc_dointvec_minmax);
|
|
EXPORT_SYMBOL_GPL(proc_douintvec_minmax);
|
|
EXPORT_SYMBOL_GPL(proc_douintvec_minmax);
|
|
|
|
+EXPORT_SYMBOL_GPL(proc_dopipe_max_size);
|
|
EXPORT_SYMBOL(proc_dointvec_userhz_jiffies);
|
|
EXPORT_SYMBOL(proc_dointvec_userhz_jiffies);
|
|
EXPORT_SYMBOL(proc_dointvec_ms_jiffies);
|
|
EXPORT_SYMBOL(proc_dointvec_ms_jiffies);
|
|
EXPORT_SYMBOL(proc_dostring);
|
|
EXPORT_SYMBOL(proc_dostring);
|