ALT Linux kernel packages development
 help / color / mirror / Atom feed
* [d-kernel] [PATCH] kiosk: add secureexec parameter
@ 2025-08-08  8:54 mcpain
  2025-08-08 19:21 ` Vitaly Chikunov
  0 siblings, 1 reply; 2+ messages in thread
From: mcpain @ 2025-08-08  8:54 UTC (permalink / raw)
  To: devel-kernel

From: Oleg Solovyov <mcpain@altlinux.org>

if set to 0, secureexec will not be set, defaults to 1

secureexec is toggled by `kiosk` package when processing profiles in
`kiosk-profiles` package:

U /path/to/executable - secureexec is set
u /path/to/executable - secureexec is unset
---
 security/kiosk/kiosk_lsm.c | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/security/kiosk/kiosk_lsm.c b/security/kiosk/kiosk_lsm.c
index 18f810a1ce0f..af5206781863 100644
--- a/security/kiosk/kiosk_lsm.c
+++ b/security/kiosk/kiosk_lsm.c
@@ -24,6 +24,7 @@
 #define MAX_PATH 1024
 
 struct kiosk_list_struct {
+	int secureexec;
 	struct path path;
 	struct list_head list;
 };
@@ -62,6 +63,7 @@ enum kiosk_attrs {
 	KIOSK_NOATTR = 0,
 	KIOSK_ACTION,
 	KIOSK_DATA,
+	KIOSK_SECUREEXEC,
 	__KIOSK_MAX_ATTR,
 	KIOSK_MAX_ATTR = __KIOSK_MAX_ATTR - 1,
 };
@@ -74,10 +76,13 @@ static struct nla_policy kiosk_policy[KIOSK_MAX_ATTR + 1] = {
 		.type = NLA_STRING,
 		.len = sizeof(pathbuf) - 1
 	},
+	[KIOSK_SECUREEXEC] = {
+		.type = NLA_S16,
+	},
 };
 
 static int kiosk_add_item(struct list_head *list, char *filename,
-		struct rw_semaphore *sem)
+		int secureexec, struct rw_semaphore *sem)
 {
 	struct kiosk_list_struct *item, *tmp;
 	int mode;
@@ -106,12 +111,16 @@ static int kiosk_add_item(struct list_head *list, char *filename,
 	down_write(sem);
 	list_for_each_entry(tmp, list, list) {
 		if (item->path.dentry == tmp->path.dentry) {
+			if (tmp->secureexec != secureexec) {
+				tmp->secureexec = secureexec;
+			}
 			up_write(sem);
 			path_put(&item->path);
 			kfree(item);
 			return 0;
 		}
 	}
+	item->secureexec = secureexec;
 	list_add_tail(&item->list, list);
 	up_write(sem);
 
@@ -212,12 +221,16 @@ static int kiosk_list_items(struct list_head *list, struct rw_semaphore *sem,
 static int kiosk_genl_doit(struct sk_buff *skb, struct genl_info *info)
 {
 	int action;
+	int secureexec;
 
 	if (info->attrs[KIOSK_DATA])
 		strscpy(pathbuf, nla_data(info->attrs[KIOSK_DATA]), sizeof(pathbuf));
 	else
 		pathbuf[0] = '\0';
 
+	secureexec = info->attrs[KIOSK_SECUREEXEC] ?
+		nla_get_s16(info->attrs[KIOSK_SECUREEXEC]) : 1;
+
 	action = info->attrs[KIOSK_ACTION] ?
 		nla_get_s16(info->attrs[KIOSK_ACTION]) : -1;
 
@@ -243,7 +256,7 @@ static int kiosk_genl_doit(struct sk_buff *skb, struct genl_info *info)
 		return 0;
 	}
 	case KIOSK_USERLIST_ADD:
-		return kiosk_add_item(&user_list, pathbuf, &user_sem);
+		return kiosk_add_item(&user_list, pathbuf, secureexec, &user_sem);
 	case KIOSK_USERLIST_DEL:
 		return kiosk_remove_item(&user_list, pathbuf,
 					 &user_sem);
@@ -297,6 +310,10 @@ static int kiosk_bprm_check_security(struct linux_binprm *bprm)
 		down_read(&user_sem);
 		list_for_each_entry(node, &user_list, list) {
 			if (bprm->file->f_path.dentry == node->path.dentry) {
+				if (node->secureexec == 0) {
+					bprm->secureexec = 0;
+					pr_notice_ratelimited("Kiosk: %s will not be treated securely\n", bprm->filename);
+				}
 				up_read(&user_sem);
 				return 0;
 			}
-- 
2.50.1



^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [d-kernel] [PATCH] kiosk: add secureexec parameter
  2025-08-08  8:54 [d-kernel] [PATCH] kiosk: add secureexec parameter mcpain
@ 2025-08-08 19:21 ` Vitaly Chikunov
  0 siblings, 0 replies; 2+ messages in thread
From: Vitaly Chikunov @ 2025-08-08 19:21 UTC (permalink / raw)
  To: ALT Linux kernel packages development

Oleg,

On Fri, Aug 08, 2025 at 11:54:03AM +0300, mcpain@altlinux.org wrote:
> From: Oleg Solovyov <mcpain@altlinux.org>
> 
> if set to 0, secureexec will not be set, defaults to 1
> 
> secureexec is toggled by `kiosk` package when processing profiles in
> `kiosk-profiles` package:
> 
> U /path/to/executable - secureexec is set
> u /path/to/executable - secureexec is unset
> ---
>  security/kiosk/kiosk_lsm.c | 21 +++++++++++++++++++--
>  1 file changed, 19 insertions(+), 2 deletions(-)
> 
> diff --git a/security/kiosk/kiosk_lsm.c b/security/kiosk/kiosk_lsm.c
> index 18f810a1ce0f..af5206781863 100644
> --- a/security/kiosk/kiosk_lsm.c
> +++ b/security/kiosk/kiosk_lsm.c
> @@ -24,6 +24,7 @@
>  #define MAX_PATH 1024
>  
>  struct kiosk_list_struct {
> +	int secureexec;
>  	struct path path;
>  	struct list_head list;
>  };
> @@ -62,6 +63,7 @@ enum kiosk_attrs {
>  	KIOSK_NOATTR = 0,
>  	KIOSK_ACTION,
>  	KIOSK_DATA,
> +	KIOSK_SECUREEXEC,
>  	__KIOSK_MAX_ATTR,
>  	KIOSK_MAX_ATTR = __KIOSK_MAX_ATTR - 1,
>  };
> @@ -74,10 +76,13 @@ static struct nla_policy kiosk_policy[KIOSK_MAX_ATTR + 1] = {
>  		.type = NLA_STRING,
>  		.len = sizeof(pathbuf) - 1
>  	},
> +	[KIOSK_SECUREEXEC] = {
> +		.type = NLA_S16,
> +	},
>  };
>  
>  static int kiosk_add_item(struct list_head *list, char *filename,
> -		struct rw_semaphore *sem)
> +		int secureexec, struct rw_semaphore *sem)
>  {
>  	struct kiosk_list_struct *item, *tmp;
>  	int mode;
> @@ -106,12 +111,16 @@ static int kiosk_add_item(struct list_head *list, char *filename,
>  	down_write(sem);
>  	list_for_each_entry(tmp, list, list) {
>  		if (item->path.dentry == tmp->path.dentry) {

Полагаю, это для вех ядер где есть kiosk.

> +			if (tmp->secureexec != secureexec) {
> +				tmp->secureexec = secureexec;
> +			}

(Избыточная логика.)

Applied, thanks

>  			up_write(sem);
>  			path_put(&item->path);
>  			kfree(item);
>  			return 0;
>  		}
>  	}
> +	item->secureexec = secureexec;
>  	list_add_tail(&item->list, list);
>  	up_write(sem);
>  
> @@ -212,12 +221,16 @@ static int kiosk_list_items(struct list_head *list, struct rw_semaphore *sem,
>  static int kiosk_genl_doit(struct sk_buff *skb, struct genl_info *info)
>  {
>  	int action;
> +	int secureexec;
>  
>  	if (info->attrs[KIOSK_DATA])
>  		strscpy(pathbuf, nla_data(info->attrs[KIOSK_DATA]), sizeof(pathbuf));
>  	else
>  		pathbuf[0] = '\0';
>  
> +	secureexec = info->attrs[KIOSK_SECUREEXEC] ?
> +		nla_get_s16(info->attrs[KIOSK_SECUREEXEC]) : 1;
> +
>  	action = info->attrs[KIOSK_ACTION] ?
>  		nla_get_s16(info->attrs[KIOSK_ACTION]) : -1;
>  
> @@ -243,7 +256,7 @@ static int kiosk_genl_doit(struct sk_buff *skb, struct genl_info *info)
>  		return 0;
>  	}
>  	case KIOSK_USERLIST_ADD:
> -		return kiosk_add_item(&user_list, pathbuf, &user_sem);
> +		return kiosk_add_item(&user_list, pathbuf, secureexec, &user_sem);
>  	case KIOSK_USERLIST_DEL:
>  		return kiosk_remove_item(&user_list, pathbuf,
>  					 &user_sem);
> @@ -297,6 +310,10 @@ static int kiosk_bprm_check_security(struct linux_binprm *bprm)
>  		down_read(&user_sem);
>  		list_for_each_entry(node, &user_list, list) {
>  			if (bprm->file->f_path.dentry == node->path.dentry) {
> +				if (node->secureexec == 0) {
> +					bprm->secureexec = 0;
> +					pr_notice_ratelimited("Kiosk: %s will not be treated securely\n", bprm->filename);
> +				}
>  				up_read(&user_sem);
>  				return 0;
>  			}
> -- 
> 2.50.1
> 
> _______________________________________________
> devel-kernel mailing list
> devel-kernel@lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/devel-kernel


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2025-08-08 19:21 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-08-08  8:54 [d-kernel] [PATCH] kiosk: add secureexec parameter mcpain
2025-08-08 19:21 ` Vitaly Chikunov

ALT Linux kernel packages development

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel-kernel/0 devel-kernel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel-kernel devel-kernel/ http://lore.altlinux.org/devel-kernel \
		devel-kernel@altlinux.org devel-kernel@altlinux.ru devel-kernel@altlinux.com
	public-inbox-index devel-kernel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel-kernel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git