aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2016-11-02 11:28:37 +0100
committerJosé Bollo <jose.bollo@iot.bzh>2016-11-03 11:22:56 +0100
commit21d40b2e0dc344f6b89c2a71296a4dd2a29a2a4e (patch)
treef0a0bb5f9b9ebdf1c18422437253df7e92f28d0c
parentadc078dcd90064375fa04899c9bb039ac180c992 (diff)
Smack: fixup of bluetooth socket labelling
The sockets created by kernel thread will now be tagged @ instead of _. Change-Id: I92dcc885e9e8f7b45076f7df7a0e1ef4e66453a3 Signed-off-by: José Bollo <jose.bollo@iot.bzh>
-rw-r--r--meta-rcar-gen2/recipes-kernel/linux/linux-renesas/smack/0055-Smack-Assign-smack_known_web-as-default-smk_in-label.patch55
-rw-r--r--meta-rcar-gen2/recipes-kernel/linux/linux-renesas/smack/0056-Smack-Assign-smack_known_web-label-for-kernel-thread.patch49
-rw-r--r--meta-rcar-gen2/recipes-kernel/linux/linux-renesas/smack/0057-Smack-handles-socket-in-file_receive.patch61
-rw-r--r--meta-rcar-gen2/recipes-kernel/linux/linux-renesas_3.10.bb8
4 files changed, 173 insertions, 0 deletions
diff --git a/meta-rcar-gen2/recipes-kernel/linux/linux-renesas/smack/0055-Smack-Assign-smack_known_web-as-default-smk_in-label.patch b/meta-rcar-gen2/recipes-kernel/linux/linux-renesas/smack/0055-Smack-Assign-smack_known_web-as-default-smk_in-label.patch
new file mode 100644
index 0000000..18353d3
--- /dev/null
+++ b/meta-rcar-gen2/recipes-kernel/linux/linux-renesas/smack/0055-Smack-Assign-smack_known_web-as-default-smk_in-label.patch
@@ -0,0 +1,55 @@
+From 292f377160c78213af88b5cc069dbdaa08db17dd Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@iot.bzh>
+Date: Wed, 2 Nov 2016 11:11:01 +0100
+Subject: [PATCH 55/56] Smack: Assign smack_known_web as default smk_in label
+ for kernel thread's socket
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This change fixes the bug associated with sockets owned by kernel threads. These
+sockets, created usually by network devices' drivers tasks, received smk_in
+label from the task that created them - the "floor" label in the most cases. The
+result was that they were not able to receive data packets because of missing
+smack rules. The main reason of the access deny is that the socket smk_in label
+is placed as the object during smk check, kernel thread's capabilities are
+omitted.
+
+Refers-to: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=7412301b76bd53ee53b860f611fc3b5b1c2245b5
+Change-Id: Icec88b0d51133df8d0a09ea8016233bde255af10
+Signed-off-by: Marcin Lis <m.lis@samsung.com>
+Signed-off-by: José Bollo <jose.bollo@iot.bzh>
+---
+ security/smack/smack_lsm.c | 16 +++++++++++++++-
+ 1 file changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
+index 895fe5c..ff696e7 100644
+--- a/security/smack/smack_lsm.c
++++ b/security/smack/smack_lsm.c
+@@ -2453,7 +2453,21 @@ static int smack_inode_setsecurity(struct inode *inode, const char *name,
+ static int smack_socket_post_create(struct socket *sock, int family,
+ int type, int protocol, int kern)
+ {
+- if (family != PF_INET || sock->sk == NULL)
++ struct socket_smack *ssp;
++
++ if (sock->sk == NULL)
++ return 0;
++
++ /*
++ * Sockets created by kernel threads receive web label.
++ */
++ if (unlikely(current->flags & PF_KTHREAD)) {
++ ssp = sock->sk->sk_security;
++ ssp->smk_in = &smack_known_web;
++ ssp->smk_out = &smack_known_web;
++ }
++
++ if (family != PF_INET)
+ return 0;
+ /*
+ * Set the outbound netlbl.
+--
+2.7.4
+
diff --git a/meta-rcar-gen2/recipes-kernel/linux/linux-renesas/smack/0056-Smack-Assign-smack_known_web-label-for-kernel-thread.patch b/meta-rcar-gen2/recipes-kernel/linux/linux-renesas/smack/0056-Smack-Assign-smack_known_web-label-for-kernel-thread.patch
new file mode 100644
index 0000000..b045101
--- /dev/null
+++ b/meta-rcar-gen2/recipes-kernel/linux/linux-renesas/smack/0056-Smack-Assign-smack_known_web-label-for-kernel-thread.patch
@@ -0,0 +1,49 @@
+From ea1c9711146e251c809ecf7eb348b548ac6e967c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@iot.bzh>
+Date: Wed, 2 Nov 2016 11:01:15 +0100
+Subject: [PATCH 56/56] Smack: Assign smack_known_web label for kernel thread's
+ socket in the sk_alloc_security hook
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Creating struct sock by sk_alloc function in various kernel subsystems
+like bluetooth dosen't call smack_socket_post_create(). In such case,
+received sock label is the floor('_') label and makes access deny.
+
+Refers-to: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=7412301b76bd53ee53b860f611fc3b5b1c2245b5
+Refers-to: https://review.tizen.org/gerrit/#/c/80717/4
+
+Change-Id: I614c5f0e6d59be5ca6b49f0581edfef79fc334cf
+Signed-off-by: jooseong lee <jooseong.lee@samsung.com>
+Signed-off-by: José Bollo <jose.bollo@iot.bzh>
+---
+ security/smack/smack_lsm.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
+index ff696e7..94914db 100644
+--- a/security/smack/smack_lsm.c
++++ b/security/smack/smack_lsm.c
+@@ -2075,8 +2075,16 @@ static int smack_sk_alloc_security(struct sock *sk, int family, gfp_t gfp_flags)
+ if (ssp == NULL)
+ return -ENOMEM;
+
+- ssp->smk_in = skp;
+- ssp->smk_out = skp;
++ /*
++ * Sockets created by kernel threads receive web label.
++ */
++ if (unlikely(current->flags & PF_KTHREAD)) {
++ ssp->smk_in = &smack_known_web;
++ ssp->smk_out = &smack_known_web;
++ } else {
++ ssp->smk_in = skp;
++ ssp->smk_out = skp;
++ }
+ ssp->smk_packet = NULL;
+
+ sk->sk_security = ssp;
+--
+2.7.4
+
diff --git a/meta-rcar-gen2/recipes-kernel/linux/linux-renesas/smack/0057-Smack-handles-socket-in-file_receive.patch b/meta-rcar-gen2/recipes-kernel/linux/linux-renesas/smack/0057-Smack-handles-socket-in-file_receive.patch
new file mode 100644
index 0000000..ba02af8
--- /dev/null
+++ b/meta-rcar-gen2/recipes-kernel/linux/linux-renesas/smack/0057-Smack-handles-socket-in-file_receive.patch
@@ -0,0 +1,61 @@
+From 99719d12de612819e06fc3d0741b7e2da119d61c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@iot.bzh>
+Date: Wed, 2 Nov 2016 18:32:32 +0100
+Subject: [PATCH] Smack: handles socket in file_receive
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The security context of sockets and the rules
+of security are differents for sockets.
+
+This is a backport of http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=79be09350
+
+Change-Id: Id520c9ca8f7ee8883523a0e4b40176524442db33
+Signed-off-by: José Bollo <jose.bollo@iot.bzh>
+---
+ security/smack/smack_lsm.c | 25 +++++++++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
+index 94914db..3b09524 100644
+--- a/security/smack/smack_lsm.c
++++ b/security/smack/smack_lsm.c
+@@ -1638,9 +1638,34 @@ static int smack_file_receive(struct file *file)
+ int may = 0;
+ struct smk_audit_info ad;
+ struct inode *inode = file_inode(file);
++ struct socket *sock;
++ struct task_smack *tsp;
++ struct socket_smack *ssp;
++
++ if (unlikely(IS_PRIVATE(inode)))
++ return 0;
+
+ smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_PATH);
+ smk_ad_setfield_u_fs_path(&ad, file->f_path);
++
++ if (S_ISSOCK(inode->i_mode)) {
++ sock = SOCKET_I(inode);
++ ssp = sock->sk->sk_security;
++ tsp = current_security();
++ /*
++ * If the receiving process can't write to the
++ * passed socket or if the passed socket can't
++ * write to the receiving process don't accept
++ * the passed socket.
++ */
++ rc = smk_access(tsp->smk_task, ssp->smk_out, MAY_WRITE, &ad);
++ rc = smk_bu_file(file, may, rc);
++ if (rc < 0)
++ return rc;
++ rc = smk_access(ssp->smk_in, tsp->smk_task, MAY_WRITE, &ad);
++ rc = smk_bu_file(file, may, rc);
++ return rc;
++ }
+ /*
+ * This code relies on bitmasks.
+ */
+--
+2.7.4
+
diff --git a/meta-rcar-gen2/recipes-kernel/linux/linux-renesas_3.10.bb b/meta-rcar-gen2/recipes-kernel/linux/linux-renesas_3.10.bb
index 912345a..4ef7e25 100644
--- a/meta-rcar-gen2/recipes-kernel/linux/linux-renesas_3.10.bb
+++ b/meta-rcar-gen2/recipes-kernel/linux/linux-renesas_3.10.bb
@@ -146,6 +146,14 @@ SRC_URI_append_smack = " \
file://smack/0054-Smack-secmark-connections.patch \
"
+# smack patches are applied if DISTRO_FEATURES has "smack"
+# smack patches for handling bluetooth
+SRC_URI_append_smack = " \
+ file://smack/0055-Smack-Assign-smack_known_web-as-default-smk_in-label.patch \
+ file://smack/0056-Smack-Assign-smack_known_web-label-for-kernel-thread.patch \
+ file://smack/0057-Smack-handles-socket-in-file_receive.patch \
+"
+
SRC_URI_append_porter = " file://can-rcar.cfg"
S = "${WORKDIR}/git"