All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] lib/notifier-error-inject: fix error when writing errno to debugfs file
@ 2022-09-17  7:06 Akinobu Mita
  0 siblings, 0 replies; only message in thread
From: Akinobu Mita @ 2022-09-17  7:06 UTC (permalink / raw)
  To: linux-doc, linux-kernel, linux-mm, linux-kselftest, corbet,
	david, osalvador, shuah, Zhao Gongyi
  Cc: Akinobu Mita, Wei Yongjun

The simple attribute files do not accept a negative value since the
commit 488dac0c9237 ("libfs: fix error cast of negative value in
simple_attr_write()"), so we can no longer use DEFINE_SIMPLE_ATTRIBUTE() to
define a file operations for errno value.

Fixes: 488dac0c9237 ("libfs: fix error cast of negative value in simple_attr_write()")
Reported-by: Wei Yongjun <weiyongjun1@huawei.com>
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
---
 lib/notifier-error-inject.c | 38 ++++++++++++++++++++++++++++++-------
 1 file changed, 31 insertions(+), 7 deletions(-)

diff --git a/lib/notifier-error-inject.c b/lib/notifier-error-inject.c
index 21016b32d313..30ec41f58d53 100644
--- a/lib/notifier-error-inject.c
+++ b/lib/notifier-error-inject.c
@@ -3,20 +3,44 @@
 
 #include "notifier-error-inject.h"
 
-static int debugfs_errno_set(void *data, u64 val)
+static int notifier_err_errno_show(struct seq_file *m, void *data)
 {
-	*(int *)data = clamp_t(int, val, -MAX_ERRNO, 0);
+	int *value = m->private;
+
+	seq_printf(m, "%d\n", *value);
+
 	return 0;
 }
 
-static int debugfs_errno_get(void *data, u64 *val)
+static int notifier_err_errno_open(struct inode *inode, struct file *file)
 {
-	*val = *(int *)data;
-	return 0;
+	return single_open(file, notifier_err_errno_show, inode->i_private);
+}
+
+static ssize_t notifier_err_errno_write(struct file *file, const char __user *ubuf, size_t len,
+					loff_t *offp)
+{
+	struct seq_file *m = file->private_data;
+	int *value = m->private;
+	int ret;
+
+	ret = kstrtoint_from_user(ubuf, len, 0, value);
+	if (ret)
+		return ret;
+
+	*value = clamp(*value, -MAX_ERRNO, 0);
+
+	return len;
 }
 
-DEFINE_SIMPLE_ATTRIBUTE(fops_errno, debugfs_errno_get, debugfs_errno_set,
-			"%lld\n");
+static const struct file_operations fops_errno = {
+	.owner = THIS_MODULE,
+	.open = notifier_err_errno_open,
+	.read = seq_read,
+	.write = notifier_err_errno_write,
+	.llseek = seq_lseek,
+	.release = single_release,
+};
 
 static struct dentry *debugfs_create_errno(const char *name, umode_t mode,
 				struct dentry *parent, int *value)
-- 
2.34.1


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2022-09-17  7:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-17  7:06 [PATCH] lib/notifier-error-inject: fix error when writing errno to debugfs file Akinobu Mita

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.