All of lore.kernel.org
 help / color / mirror / Atom feed
From: Taehee Yoo <ap420073@gmail.com>
To: davem@davemloft.net, kuba@kernel.org, gregkh@linuxfoundation.org,
	rafael@kernel.org, j.vosburgh@gmail.com, vfalico@gmail.com,
	andy@greyhouse.net, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: ap420073@gmail.com, mitch.a.williams@intel.com
Subject: [PATCH net v2 1/3] class: add class_has_file_ns() helper function
Date: Sat,  4 Apr 2020 14:18:27 +0000	[thread overview]
Message-ID: <20200404141827.26255-1-ap420073@gmail.com> (raw)

The new helper function is to check whether the class file is existing
or not. This function will be used by networking stack to
check "/sys/class/net/*" file.

Reported-by: syzbot+830c6dbfc71edc4f0b8f@syzkaller.appspotmail.com
Fixes: b76cdba9cdb2 ("[PATCH] bonding: add sysfs functionality to bonding (large)")
Signed-off-by: Taehee Yoo <ap420073@gmail.com>
---

v1 -> v2:
 - Implement class_has_file_ns() instead of class_find_and_get_file_ns().
 - Change headline.
 - Add kernel documentation comment.

 drivers/base/class.c         | 22 ++++++++++++++++++++++
 include/linux/device/class.h |  3 ++-
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/drivers/base/class.c b/drivers/base/class.c
index bcd410e6d70a..a2f2787f6aa7 100644
--- a/drivers/base/class.c
+++ b/drivers/base/class.c
@@ -105,6 +105,28 @@ void class_remove_file_ns(struct class *cls, const struct class_attribute *attr,
 		sysfs_remove_file_ns(&cls->p->subsys.kobj, &attr->attr, ns);
 }
 
+/**
+ * class_has_file_ns - check whether file is existing or not
+ * @cls: the compatibility class
+ * @name: name to look for
+ * @ns: the namespace tag to use
+ */
+bool class_has_file_ns(struct class *cls, const char *name,
+		       const void *ns)
+{
+	struct kernfs_node *kn = NULL;
+
+	if (cls) {
+		kn = kernfs_find_and_get_ns(cls->p->subsys.kobj.sd, name, ns);
+		if (kn) {
+			kernfs_put(kn);
+			return true;
+		}
+	}
+	return false;
+}
+EXPORT_SYMBOL_GPL(class_has_file_ns);
+
 static struct class *class_get(struct class *cls)
 {
 	if (cls)
diff --git a/include/linux/device/class.h b/include/linux/device/class.h
index e8d470c457d1..b3d43658b201 100644
--- a/include/linux/device/class.h
+++ b/include/linux/device/class.h
@@ -209,7 +209,8 @@ extern int __must_check class_create_file_ns(struct class *class,
 extern void class_remove_file_ns(struct class *class,
 				 const struct class_attribute *attr,
 				 const void *ns);
-
+bool class_has_file_ns(struct class *cls, const char *name,
+		       const void *ns);
 static inline int __must_check class_create_file(struct class *class,
 					const struct class_attribute *attr)
 {
-- 
2.17.1


             reply	other threads:[~2020-04-04 14:19 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-04 14:18 Taehee Yoo [this message]
2020-04-04 15:50 ` [PATCH net v2 1/3] class: add class_has_file_ns() helper function Greg KH
2020-04-04 16:35   ` Taehee Yoo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200404141827.26255-1-ap420073@gmail.com \
    --to=ap420073@gmail.com \
    --cc=andy@greyhouse.net \
    --cc=davem@davemloft.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=j.vosburgh@gmail.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mitch.a.williams@intel.com \
    --cc=netdev@vger.kernel.org \
    --cc=rafael@kernel.org \
    --cc=vfalico@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.