* [PATCH v1] LSM: Enable multiple calls to security_add_hooks() for the same LSM
@ 2017-04-29 19:02 Mickaël Salaün
2017-04-29 20:00 ` Casey Schaufler
2017-04-30 23:28 ` James Morris
0 siblings, 2 replies; 6+ messages in thread
From: Mickaël Salaün @ 2017-04-29 19:02 UTC (permalink / raw)
To: linux-security-module
Check if the registering LSM already registered hooks just before. This
enable to split hook declarations into multiple files without
registering multiple time the same LSM name, starting from commit
d69dece5f5b6 ("LSM: Add /sys/kernel/security/lsm").
Signed-off-by: Micka?l Sala?n <mic@digikod.net>
Cc: Casey Schaufler <casey@schaufler-ca.com>
Cc: James Morris <james.l.morris@oracle.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Serge E. Hallyn <serge@hallyn.com>
Link: https://lkml.kernel.org/r/ccad825b-7a58-e499-e51b-bd7c98581afe at schaufler-ca.com
---
security/security.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/security/security.c b/security/security.c
index 549bddcc2116..6be65050b268 100644
--- a/security/security.c
+++ b/security/security.c
@@ -25,6 +25,7 @@
#include <linux/mount.h>
#include <linux/personality.h>
#include <linux/backing-dev.h>
+#include <linux/string.h>
#include <net/flow.h>
#define MAX_LSM_EVM_XATTR 2
@@ -86,6 +87,32 @@ static int __init choose_lsm(char *str)
}
__setup("security=", choose_lsm);
+static bool match_last_lsm(const char *list, const char *last)
+{
+ size_t list_len, last_len, i;
+
+ if (!list || !last)
+ return false;
+ list_len = strlen(list);
+ last_len = strlen(last);
+ if (!last_len || !list_len)
+ return false;
+ if (last_len > list_len)
+ return false;
+
+ for (i = 0; i < last_len; i++) {
+ if (list[list_len - 1 - i] != last[last_len - 1 - i])
+ return false;
+ }
+ /* Check if last_len == list_len */
+ if (i == list_len)
+ return true;
+ /* Check if it is a full name */
+ if (list[list_len - 1 - i] == ',')
+ return true;
+ return false;
+}
+
static int lsm_append(char *new, char **result)
{
char *cp;
@@ -93,6 +120,9 @@ static int lsm_append(char *new, char **result)
if (*result == NULL) {
*result = kstrdup(new, GFP_KERNEL);
} else {
+ /* Check if it is the last registered name */
+ if (match_last_lsm(*result, new))
+ return 0;
cp = kasprintf(GFP_KERNEL, "%s,%s", *result, new);
if (cp == NULL)
return -ENOMEM;
--
2.11.0
--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
the body of a message to majordomo at vger.kernel.org
More majordomo info@ http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH v1] LSM: Enable multiple calls to security_add_hooks() for the same LSM
2017-04-29 19:02 [PATCH v1] LSM: Enable multiple calls to security_add_hooks() for the same LSM Mickaël Salaün
@ 2017-04-29 20:00 ` Casey Schaufler
2017-04-30 2:11 ` Tetsuo Handa
2017-04-30 23:28 ` James Morris
1 sibling, 1 reply; 6+ messages in thread
From: Casey Schaufler @ 2017-04-29 20:00 UTC (permalink / raw)
To: linux-security-module
On 4/29/2017 12:02 PM, Micka?l Sala?n wrote:
> Check if the registering LSM already registered hooks just before. This
> enable to split hook declarations into multiple files without
> registering multiple time the same LSM name, starting from commit
> d69dece5f5b6 ("LSM: Add /sys/kernel/security/lsm").
What's special about the previous registration? Keep it
simple and check it the name is already anywhere on the
list and only add it if it's not already there. I don't
see advantage to:
% cat /sys/kernel/security/lsm
capability,yama,spiffy,selinux,spiffy
over
% cat /sys/kernel/security/lsm
capability,yama,spiffy,selinux
>
> Signed-off-by: Micka?l Sala?n <mic@digikod.net>
> Cc: Casey Schaufler <casey@schaufler-ca.com>
> Cc: James Morris <james.l.morris@oracle.com>
> Cc: Kees Cook <keescook@chromium.org>
> Cc: Serge E. Hallyn <serge@hallyn.com>
> Link: https://lkml.kernel.org/r/ccad825b-7a58-e499-e51b-bd7c98581afe at schaufler-ca.com
> ---
> security/security.c | 30 ++++++++++++++++++++++++++++++
> 1 file changed, 30 insertions(+)
>
> diff --git a/security/security.c b/security/security.c
> index 549bddcc2116..6be65050b268 100644
> --- a/security/security.c
> +++ b/security/security.c
> @@ -25,6 +25,7 @@
> #include <linux/mount.h>
> #include <linux/personality.h>
> #include <linux/backing-dev.h>
> +#include <linux/string.h>
> #include <net/flow.h>
>
> #define MAX_LSM_EVM_XATTR 2
> @@ -86,6 +87,32 @@ static int __init choose_lsm(char *str)
> }
> __setup("security=", choose_lsm);
>
> +static bool match_last_lsm(const char *list, const char *last)
> +{
> + size_t list_len, last_len, i;
> +
> + if (!list || !last)
> + return false;
> + list_len = strlen(list);
> + last_len = strlen(last);
> + if (!last_len || !list_len)
> + return false;
> + if (last_len > list_len)
> + return false;
> +
> + for (i = 0; i < last_len; i++) {
> + if (list[list_len - 1 - i] != last[last_len - 1 - i])
> + return false;
> + }
> + /* Check if last_len == list_len */
> + if (i == list_len)
> + return true;
> + /* Check if it is a full name */
> + if (list[list_len - 1 - i] == ',')
> + return true;
> + return false;
> +}
> +
> static int lsm_append(char *new, char **result)
> {
> char *cp;
> @@ -93,6 +120,9 @@ static int lsm_append(char *new, char **result)
> if (*result == NULL) {
> *result = kstrdup(new, GFP_KERNEL);
> } else {
> + /* Check if it is the last registered name */
> + if (match_last_lsm(*result, new))
> + return 0;
> cp = kasprintf(GFP_KERNEL, "%s,%s", *result, new);
> if (cp == NULL)
> return -ENOMEM;
--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH v1] LSM: Enable multiple calls to security_add_hooks() for the same LSM
2017-04-29 20:00 ` Casey Schaufler
@ 2017-04-30 2:11 ` Tetsuo Handa
2017-04-30 9:35 ` Mickaël Salaün
0 siblings, 1 reply; 6+ messages in thread
From: Tetsuo Handa @ 2017-04-30 2:11 UTC (permalink / raw)
To: linux-security-module
Casey Schaufler wrote:
> On 4/29/2017 12:02 PM, Mickael Salaun wrote:
> > Check if the registering LSM already registered hooks just before. This
> > enable to split hook declarations into multiple files without
> > registering multiple time the same LSM name, starting from commit
> > d69dece5f5b6 ("LSM: Add /sys/kernel/security/lsm").
>
> What's special about the previous registration? Keep it
> simple and check it the name is already anywhere on the
> list and only add it if it's not already there. I don't
> see advantage to:
>
> % cat /sys/kernel/security/lsm
> capability,yama,spiffy,selinux,spiffy
>
> over
> % cat /sys/kernel/security/lsm
> capability,yama,spiffy,selinux
>
- if (lsm_append(lsm, &lsm_names) < 0)
+ if (lsm && lsm_append(lsm, &lsm_names) < 0)
in security_add_hooks()?
--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
the body of a message to majordomo at vger.kernel.org
More majordomo info@ http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH v1] LSM: Enable multiple calls to security_add_hooks() for the same LSM
2017-04-30 2:11 ` Tetsuo Handa
@ 2017-04-30 9:35 ` Mickaël Salaün
0 siblings, 0 replies; 6+ messages in thread
From: Mickaël Salaün @ 2017-04-30 9:35 UTC (permalink / raw)
To: linux-security-module
On 30/04/2017 04:11, Tetsuo Handa wrote:
> Casey Schaufler wrote:
>> On 4/29/2017 12:02 PM, Mickael Salaun wrote:
>>> Check if the registering LSM already registered hooks just before. This
>>> enable to split hook declarations into multiple files without
>>> registering multiple time the same LSM name, starting from commit
>>> d69dece5f5b6 ("LSM: Add /sys/kernel/security/lsm").
>>
>> What's special about the previous registration? Keep it
>> simple and check it the name is already anywhere on the
>> list and only add it if it's not already there. I don't
>> see advantage to:
>>
>> % cat /sys/kernel/security/lsm
>> capability,yama,spiffy,selinux,spiffy
>>
>> over
>> % cat /sys/kernel/security/lsm
>> capability,yama,spiffy,selinux
>>
That was my first though, but then I realized that I don't see any use
case where an LSM would register hooks interleaved with other LSM. I
find the current approach simpler because we only search from the end of
the string and we do not handle special cases (e.g. matching only a
sub-name). Moreover, this approach respects the semantic describe in
Documentation/security/LSM.txt: "The list reflects the order in which
checks are made".
>
> - if (lsm_append(lsm, &lsm_names) < 0)
> + if (lsm && lsm_append(lsm, &lsm_names) < 0)
>
> in security_add_hooks()?
>
That was considered
[https://lkml.kernel.org/r/CAGXu5jJCvJ6-uZ=Kfhh3xD7UvaY+G99e9NXFMzvi=9OQzA6Ecg at mail.gmail.com]
but Kees and Casey seem to prefer the current approach.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://kernsec.org/pipermail/linux-security-module-archive/attachments/20170430/f8158ef3/attachment.sig>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v1] LSM: Enable multiple calls to security_add_hooks() for the same LSM
2017-04-29 19:02 [PATCH v1] LSM: Enable multiple calls to security_add_hooks() for the same LSM Mickaël Salaün
2017-04-29 20:00 ` Casey Schaufler
@ 2017-04-30 23:28 ` James Morris
[not found] ` <ca662813-e078-c579-d5a8-46ea03542f4b@digikod.net>
1 sibling, 1 reply; 6+ messages in thread
From: James Morris @ 2017-04-30 23:28 UTC (permalink / raw)
To: linux-security-module
On Sat, 29 Apr 2017, Micka?l Sala?n wrote:
> Check if the registering LSM already registered hooks just before. This
> enable to split hook declarations into multiple files without
> registering multiple time the same LSM name, starting from commit
> d69dece5f5b6 ("LSM: Add /sys/kernel/security/lsm").
Please include a detailed rationale for these patches. The above tells us
very little about why they are needed.
--
James Morris
<jmorris@namei.org>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2017-05-08 20:07 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-04-29 19:02 [PATCH v1] LSM: Enable multiple calls to security_add_hooks() for the same LSM Mickaël Salaün
2017-04-29 20:00 ` Casey Schaufler
2017-04-30 2:11 ` Tetsuo Handa
2017-04-30 9:35 ` Mickaël Salaün
2017-04-30 23:28 ` James Morris
[not found] ` <ca662813-e078-c579-d5a8-46ea03542f4b@digikod.net>
2017-05-08 20:07 ` Casey Schaufler
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox