[d-kernel] [PATCH 1/2] kiosk: split kiosk_nl_send_*

mcpain на altlinux.org mcpain на altlinux.org
Ср Авг 6 16:18:22 MSK 2025


From: Oleg Solovyov <mcpain at altlinux.org>

kiosk_nl_send_msg is used within two different contexts:
- send current kiosk mode
- send kiosk list

So, we have to use different methods for different contexts.
---
 security/kiosk/kiosk_lsm.c | 38 +++++++++++++++++++++++++++++++++++---
 1 file changed, 35 insertions(+), 3 deletions(-)

diff --git a/security/kiosk/kiosk_lsm.c b/security/kiosk/kiosk_lsm.c
index 18f810a1ce0f..20635af4936f 100644
--- a/security/kiosk/kiosk_lsm.c
+++ b/security/kiosk/kiosk_lsm.c
@@ -148,7 +148,39 @@ static int kiosk_remove_item(struct list_head *list, char *filename,
 	return 0;
 }
 
-static int kiosk_nl_send_msg(struct sk_buff *skb, struct genl_info *info,
+static int kiosk_nl_send_mode(struct sk_buff *skb, struct genl_info *info,
+			     char *msg)
+{
+	int msg_size;
+	int res;
+	struct nlmsghdr *nlh;
+	struct sk_buff *skb_out;
+
+	msg_size = strlen(msg) + 1;
+	/* we put string so add space for NUL-terminator */
+
+	skb_out = genlmsg_new(msg_size, GFP_KERNEL);
+	if (!skb_out)
+		return -ENOMEM;
+
+	nlh = genlmsg_put_reply(skb_out, info, &genl_kiosk_family, 0,
+				KIOSK_REPLY);
+	if (!nlh) {
+		nlmsg_free(skb_out);
+		return -ENOMEM;
+	}
+
+	res = nla_put_string(skb_out, KIOSK_DATA, msg);
+	if (res) {
+		nlmsg_free(skb_out);
+		return res;
+	}
+
+	genlmsg_end(skb_out, nlh);
+	return genlmsg_reply(skb_out, info);
+}
+
+static int kiosk_nl_send_item(struct sk_buff *skb, struct genl_info *info,
 			     char *msg)
 {
 	int msg_size;
@@ -206,7 +238,7 @@ static int kiosk_list_items(struct list_head *list, struct rw_semaphore *sem,
 		path = "";
 
 	up_read(sem);
-	return kiosk_nl_send_msg(skb, info, path);
+	return kiosk_nl_send_item(skb, info, path);
 }
 
 static int kiosk_genl_doit(struct sk_buff *skb, struct genl_info *info)
@@ -230,7 +262,7 @@ static int kiosk_genl_doit(struct sk_buff *skb, struct genl_info *info)
 		if (!strlen(pathbuf)) {
 			/* we want to retrieve current mode */
 			snprintf(buf, sizeof(buf), "%d", kiosk_mode);
-			return kiosk_nl_send_msg(skb, info, buf);
+			return kiosk_nl_send_mode(skb, info, buf);
 		}
 
 		error = kstrtouint(pathbuf, 0, &new_mode);
-- 
2.50.1



Подробная информация о списке рассылки devel-kernel