[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