|
@@ -174,11 +174,32 @@ extern int no_unaligned_warning;
|
|
|
|
|
|
#ifdef CONFIG_PROC_SYSCTL
|
|
|
|
|
|
-#define SYSCTL_WRITES_LEGACY -1
|
|
|
-#define SYSCTL_WRITES_WARN 0
|
|
|
-#define SYSCTL_WRITES_STRICT 1
|
|
|
+/**
|
|
|
+ * enum sysctl_writes_mode - supported sysctl write modes
|
|
|
+ *
|
|
|
+ * @SYSCTL_WRITES_LEGACY: each write syscall must fully contain the sysctl value
|
|
|
+ * to be written, and multiple writes on the same sysctl file descriptor
|
|
|
+ * will rewrite the sysctl value, regardless of file position. No warning
|
|
|
+ * is issued when the initial position is not 0.
|
|
|
+ * @SYSCTL_WRITES_WARN: same as above but warn when the initial file position is
|
|
|
+ * not 0.
|
|
|
+ * @SYSCTL_WRITES_STRICT: writes to numeric sysctl entries must always be at
|
|
|
+ * file position 0 and the value must be fully contained in the buffer
|
|
|
+ * sent to the write syscall. If dealing with strings respect the file
|
|
|
+ * position, but restrict this to the max length of the buffer, anything
|
|
|
+ * passed the max lenght will be ignored. Multiple writes will append
|
|
|
+ * to the buffer.
|
|
|
+ *
|
|
|
+ * These write modes control how current file position affects the behavior of
|
|
|
+ * updating sysctl values through the proc interface on each write.
|
|
|
+ */
|
|
|
+enum sysctl_writes_mode {
|
|
|
+ SYSCTL_WRITES_LEGACY = -1,
|
|
|
+ SYSCTL_WRITES_WARN = 0,
|
|
|
+ SYSCTL_WRITES_STRICT = 1,
|
|
|
+};
|
|
|
|
|
|
-static int sysctl_writes_strict = SYSCTL_WRITES_STRICT;
|
|
|
+static enum sysctl_writes_mode sysctl_writes_strict = SYSCTL_WRITES_STRICT;
|
|
|
|
|
|
static int proc_do_cad_pid(struct ctl_table *table, int write,
|
|
|
void __user *buffer, size_t *lenp, loff_t *ppos);
|