lkdtm: add tests for atomic over-/underflow
RFC PATCH v2 1/1 lkdtm: add tests for atomic over-/underflow
This adds additional tests for the remaining atomic functions. Since the bulk of the logic is identical, the functions are generated with macros. Based on work by Hans Liljestrand.
---
This is a replacement for the 13/13 patch, using macros more extensively and also ignores return values to avoid "calculated but unused" warnings.
--- drivers/misc/lkdtm.h | 24 +++++++++++++-- drivers/misc/lkdtm_bugs.c | 74 ++++++++++++++++++++++++++++++++--------------- drivers/misc/lkdtm_core.c | 24 +++++++++++++-- 3 files changed, 95 insertions(+), 27 deletions(-)
drivers/misc/lkdtm.h +22 -2
@@ -19,8 +19,28 @@ void lkdtm_SOFTLOCKUP(void);void lkdtm_HARDLOCKUP (void );void lkdtm_SPINLOCKUP (void );void lkdtm_HUNG_TASK (void ); -void lkdtm_ATOMIC_UNDERFLOW (void ); -void lkdtm_ATOMIC_OVERFLOW (void ); +void lkdtm_OVERFLOW_atomic_inc (void ); +void lkdtm_OVERFLOW_atomic_inc_return (void ); +void lkdtm_OVERFLOW_atomic_inc_and_test (void ); +void lkdtm_OVERFLOW_atomic_add (void ); +void lkdtm_OVERFLOW_atomic_add_return (void ); +void lkdtm_OVERFLOW_atomic_add_unless (void ); +void lkdtm_OVERFLOW_atomic_long_inc (void ); +void lkdtm_OVERFLOW_atomic_long_inc_return (void ); +void lkdtm_OVERFLOW_atomic_long_inc_and_test (void ); +void lkdtm_OVERFLOW_atomic_long_add (void ); +void lkdtm_OVERFLOW_atomic_long_add_return (void ); +void lkdtm_OVERFLOW_atomic_long_add_unless (void ); +void lkdtm_UNDERFLOW_atomic_dec (void ); +void lkdtm_UNDERFLOW_atomic_dec_return (void ); +void lkdtm_UNDERFLOW_atomic_sub (void ); +void lkdtm_UNDERFLOW_atomic_sub_return (void ); +void lkdtm_UNDERFLOW_atomic_sub_and_test (void ); +void lkdtm_UNDERFLOW_atomic_long_dec (void ); +void lkdtm_UNDERFLOW_atomic_long_dec_return (void ); +void lkdtm_UNDERFLOW_atomic_long_sub (void ); +void lkdtm_UNDERFLOW_atomic_long_sub_return (void ); +void lkdtm_UNDERFLOW_atomic_long_sub_and_test (void );/* lkdtm_heap.c */ void lkdtm_OVERWRITE_ALLOCATION (void );
drivers/misc/lkdtm_bugs.c +51 -23
77 lines not on this page · raw message
drivers/misc/lkdtm_core.c +22 -2
@@ -218,8 +218,28 @@ struct crashtype crashtypes[] = {CRASHTYPE (WRITE_RO ),CRASHTYPE (WRITE_RO_AFTER_INIT ),CRASHTYPE (WRITE_KERN ), -CRASHTYPE (ATOMIC_UNDERFLOW ), -CRASHTYPE (ATOMIC_OVERFLOW ), +CRASHTYPE (OVERFLOW_atomic_inc), +CRASHTYPE (OVERFLOW_atomic_inc_return), +CRASHTYPE (OVERFLOW_atomic_inc_and_test), +CRASHTYPE (OVERFLOW_atomic_add), +CRASHTYPE (OVERFLOW_atomic_add_return), +CRASHTYPE (OVERFLOW_atomic_add_unless), +CRASHTYPE (OVERFLOW_atomic_long_inc), +CRASHTYPE (OVERFLOW_atomic_long_inc_return), +CRASHTYPE (OVERFLOW_atomic_long_inc_and_test), +CRASHTYPE (OVERFLOW_atomic_long_add), +CRASHTYPE (OVERFLOW_atomic_long_add_return), +CRASHTYPE (OVERFLOW_atomic_long_add_unless), +CRASHTYPE (UNDERFLOW_atomic_dec), +CRASHTYPE (UNDERFLOW_atomic_dec_return), +CRASHTYPE (UNDERFLOW_atomic_sub), +CRASHTYPE (UNDERFLOW_atomic_sub_return), +CRASHTYPE (UNDERFLOW_atomic_sub_and_test), +CRASHTYPE (UNDERFLOW_atomic_long_dec), +CRASHTYPE (UNDERFLOW_atomic_long_dec_return), +CRASHTYPE (UNDERFLOW_atomic_long_sub), +CRASHTYPE (UNDERFLOW_atomic_long_sub_return), +CRASHTYPE (UNDERFLOW_atomic_long_sub_and_test),CRASHTYPE (USERCOPY_HEAP_SIZE_TO ),CRASHTYPE (USERCOPY_HEAP_SIZE_FROM ), CRASHTYPE(USERCOPY_HEAP_FLAG_TO),
Signature · 6 lines
2.7.4 -- Kees Cook Nexus Security
Thank you Kees! I applied the commit to our hardened_atomic_on_next branch and it will be included into the next rfc.
-----Original Message-----
From: Kees Cook [mailto:[email protected]]
Sent: Tuesday, October 25, 2016 11:43 PM
To: Hans Liljestrand <[email protected]>
Cc: Reshetova, Elena <[email protected]>; David Windsor <[email protected]>; [email protected]
Subject: [RFC v2 PATCH 13.1/13] lkdtm: add tests for atomic over-/underflow
This adds additional tests for the remaining atomic functions. Since the bulk of the logic is identical, the functions are generated with macros. Based on work by Hans Liljestrand.
---
This is a replacement for the 13/13 patch, using macros more extensively and also ignores return values to avoid "calculated but unused" warnings.
--- drivers/misc/lkdtm.h | 24 +++++++++++++-- drivers/misc/lkdtm_bugs.c | 74 ++++++++++++++++++++++++++++++++--------------- drivers/misc/lkdtm_core.c | 24 +++++++++++++-- 3 files changed, 95 insertions(+), 27 deletions(-)
drivers/misc/lkdtm.h +22 -0
@@ -19,8 +19,28 @@ void lkdtm_SOFTLOCKUP(void); void lkdtm_HARDLOCKUP(void); void lkdtm_SPINLOCKUP(void); void lkdtm_HUNG_TASK(void); -void lkdtm_ATOMIC_UNDERFLOW(void); -void lkdtm_ATOMIC_OVERFLOW(void); +void lkdtm_OVERFLOW_atomic_inc (void ); +void lkdtm_OVERFLOW_atomic_inc_return (void ); +void lkdtm_OVERFLOW_atomic_inc_and_test (void ); +void lkdtm_OVERFLOW_atomic_add (void ); +void lkdtm_OVERFLOW_atomic_add_return (void ); +void lkdtm_OVERFLOW_atomic_add_unless (void ); +void lkdtm_OVERFLOW_atomic_long_inc (void ); +void lkdtm_OVERFLOW_atomic_long_inc_return (void ); +void lkdtm_OVERFLOW_atomic_long_inc_and_test (void ); +void lkdtm_OVERFLOW_atomic_long_add (void ); +void lkdtm_OVERFLOW_atomic_long_add_return (void ); +void lkdtm_OVERFLOW_atomic_long_add_unless (void ); +void lkdtm_UNDERFLOW_atomic_dec (void ); +void lkdtm_UNDERFLOW_atomic_dec_return (void ); +void lkdtm_UNDERFLOW_atomic_sub (void ); +void lkdtm_UNDERFLOW_atomic_sub_return (void ); +void lkdtm_UNDERFLOW_atomic_sub_and_test (void ); +void lkdtm_UNDERFLOW_atomic_long_dec (void ); +void lkdtm_UNDERFLOW_atomic_long_dec_return (void ); +void lkdtm_UNDERFLOW_atomic_long_sub (void ); +void lkdtm_UNDERFLOW_atomic_long_sub_return (void ); +void lkdtm_UNDERFLOW_atomic_long_sub_and_test (void );/* lkdtm_heap.c */ void lkdtm_OVERWRITE_ALLOCATION (void );
drivers/misc/lkdtm_bugs.c +51 -23
77 lines not on this page · raw message
drivers/misc/lkdtm_core.c +22 -2
@@ -218,8 +218,28 @@ struct crashtype crashtypes[] = {CRASHTYPE (WRITE_RO ),CRASHTYPE (WRITE_RO_AFTER_INIT ),CRASHTYPE (WRITE_KERN ), -CRASHTYPE (ATOMIC_UNDERFLOW ), -CRASHTYPE (ATOMIC_OVERFLOW ), +CRASHTYPE (OVERFLOW_atomic_inc), +CRASHTYPE (OVERFLOW_atomic_inc_return), +CRASHTYPE (OVERFLOW_atomic_inc_and_test), +CRASHTYPE (OVERFLOW_atomic_add), +CRASHTYPE (OVERFLOW_atomic_add_return), +CRASHTYPE (OVERFLOW_atomic_add_unless), +CRASHTYPE (OVERFLOW_atomic_long_inc), +CRASHTYPE (OVERFLOW_atomic_long_inc_return), +CRASHTYPE (OVERFLOW_atomic_long_inc_and_test), +CRASHTYPE (OVERFLOW_atomic_long_add), +CRASHTYPE (OVERFLOW_atomic_long_add_return), +CRASHTYPE (OVERFLOW_atomic_long_add_unless), +CRASHTYPE (UNDERFLOW_atomic_dec), +CRASHTYPE (UNDERFLOW_atomic_dec_return), +CRASHTYPE (UNDERFLOW_atomic_sub), +CRASHTYPE (UNDERFLOW_atomic_sub_return), +CRASHTYPE (UNDERFLOW_atomic_sub_and_test), +CRASHTYPE (UNDERFLOW_atomic_long_dec), +CRASHTYPE (UNDERFLOW_atomic_long_dec_return), +CRASHTYPE (UNDERFLOW_atomic_long_sub), +CRASHTYPE (UNDERFLOW_atomic_long_sub_return), +CRASHTYPE (UNDERFLOW_atomic_long_sub_and_test),CRASHTYPE (USERCOPY_HEAP_SIZE_TO ),CRASHTYPE (USERCOPY_HEAP_SIZE_FROM ), CRASHTYPE(USERCOPY_HEAP_FLAG_TO),
--
2.7.4
Signature · 2 lines
Kees Cook Nexus Security
Quoted 1 line · Elena
Thank you Kees! I applied the commit to our
hardened_atomic_on_nextbranch and it will be included into the next rfc.
Cool, thanks. I assume this should get atomic64_t and local_t tests as well?
-Kees
Signature · 2 lines
Kees Cook Nexus Security
Quoted 6 lines · Kees Cook
Quoted 1 line · Elena
Thank you Kees! I applied the commit to our
hardened_atomic_on_nextbranch and it will be included into the next rfc.Cool, thanks. I assume this should get
atomic64_tandlocal_ttests as well?
Yes, I'm currently compiling a build with atomic64_t and local_t tests added. With the improved lkdtm macros its much easier to add the extra types, thank you Kees!
Regards,
-hans
Quoted 11 lines · Hans Liljestrand
Quoted 6 lines · Kees Cook
Quoted 1 line · Elena
Thank you Kees! I applied the commit to our
hardened_atomic_on_nextbranch and it will be included into the next rfc.Cool, thanks. I assume this should get
atomic64_tandlocal_ttests as well?Yes, I'm currently compiling a build with
atomic64_tandlocal_ttests added. With the improved lkdtm macros its much easier to add the extra types, thank you Kees!
Sure thing! I may have yet-another patch for this, as I didn't like repeating the same things in three files whenever a new test was added. Moar macro magick!
-Kees
Signature · 2 lines
Kees Cook Nexus Security
Quoted 9 lines · Kees Cook
Quoted 8 lines · Hans Liljestrand
Quoted 6 lines · Kees Cook
Quoted 1 line · Elena
Thank you Kees! I applied the commit to our
hardened_atomic_on_nextbranch and it will be included into the next rfc.Cool, thanks. I assume this should get
atomic64_tandlocal_ttests as well?
Quoted 7 lines
Quoted 3 lines
Yes, I'm currently compiling a build with
atomic64_tandlocal_ttests added. With the improved lkdtm macros its much easier to add the extra types, thank you Kees!Sure thing! I may have yet-another patch for this, as I didn't like repeating the same things in three files whenever a new test was added. Moar macro magick!
It would be nice to expose atomic* variables to userspace via debugfs so that we can confirm that the values will not be changed if overflowed. See the attached patch.
We will be able to check the test result:
# /bin/echo ATOMIC_ADD_OVERFLOW > /debug/provoke-crash/DIRECT # echo $? # if [ cat /debug/provoke-crash/atomic -eq INT_MAX ]; then # echo PASS ; fi
Thanks,
-Takahiro AKASHI
Quoted 6 lines
-Kees
Signature · 2 lines
Kees Cook Nexus Security
===8<===
Quoted 1 line
From
c516b50b4764c5c1ba0dd39e3a5022d026e35514Mon Sep 17 00:00:00 2001
From: AKASHI Takahiro <[email protected]>
Date: Fri, 28 Oct 2016 10:55:50 +0900
Subject: [PATCH] lkdtm: expose atomic variables via debugfs
--- drivers/misc/lkdtm.h | 2 ++ drivers/misc/lkdtm_bugs.c | 75 +++++++++++++++++++++++++++++++++++++---------- drivers/misc/lkdtm_core.c | 3 ++ 3 files changed, 64 insertions(+), 16 deletions(-)
drivers/misc/lkdtm.h +2 -0
@@ -3,10 +3,12 @@#define pr_fmt (fmt) "lkdtm: " fmt +#include <linux/fs.h> #include <linux/kernel.h> /* lkdtm_bugs.c */ void __init lkdtm_bugs_init (int *recur_param); +void __init lkdtm_bugs_init2 (struct dentry *parent);void lkdtm_PANIC (void );void lkdtm_BUG (void );void lkdtm_WARNING (void );
drivers/misc/lkdtm_bugs.c +59 -16
130 lines not on this page · raw message
drivers/misc/lkdtm_core.c +3 -0
@@ -536,6 +536,9 @@ static int __init lkdtm_module_init(void)pr_info ("No crash points registered, enable through debugfs\n" ); } +/* misc setup */ +lkdtm_bugs_init2 (lkdtm_debugfs_root); +return 0 ; out_err:
Signature · 1 line
2.10.0
Quoted 14 lines · AKASHI Takahiro
Quoted 13 lines · Kees Cook
Quoted 11 lines · Hans Liljestrand
Quoted 6 lines · Kees Cook
Quoted 1 line · Elena
Thank you Kees! I applied the commit to our
hardened_atomic_on_nextbranch and it will be included into the next rfc.Cool, thanks. I assume this should get
atomic64_tandlocal_ttests as well?Yes, I'm currently compiling a build with
atomic64_tandlocal_ttests added. With the improved lkdtm macros its much easier to add the extra types, thank you Kees!
Quoted 7 lines
Quoted 3 lines
Sure thing! I may have yet-another patch for this, as I didn't like repeating the same things in three files whenever a new test was added. Moar macro magick!
It would be nice to expose atomic* variables to userspace via debugfs so that we can confirm that the values will not be changed if overflowed. See the attached patch.
Yes, thanks! This definitely looks useful. I've been testing with a script that parses the kernel logs, but that obviously doesn't test what the values end up being. We actually just were troubleshooting an issue where this would have helped greatly.
We can't unfortunately directly apply your patch since we just switched over to using Kees' improved more-macros test implementation. We're currently furiously trying to get a coherent next RFC together, but once I get the time I'll apply the patch and rework it for the current test implementation.
Thanks,
-hans liljestrand
Quoted 202 lines
We will be able to check the test result:
# /bin/echo ATOMIC_ADD_OVERFLOW > /debug/provoke-crash/DIRECT # echo $? # if [ cat /debug/provoke-crash/atomic -eq INT_MAX ]; then # echo PASS ; fiThanks,
-Takahiro AKASHIQuoted 6 lines
-Kees
Signature · 2 lines
Kees Cook Nexus Security===8<===
Fromc516b50b4764c5c1ba0dd39e3a5022d026e35514Mon Sep 17 00:00:00 2001
From: AKASHI Takahiro <[email protected]>
Date: Fri, 28 Oct 2016 10:55:50 +0900
Subject: [PATCH] lkdtm: expose atomic variables via debugfsSigned-off-by AKASHI Takahiro <[email protected]>--- drivers/misc/lkdtm.h | 2 ++ drivers/misc/lkdtm_bugs.c | 75 +++++++++++++++++++++++++++++++++++++---------- drivers/misc/lkdtm_core.c | 3 ++ 3 files changed, 64 insertions(+), 16 deletions(-)drivers/misc/lkdtm.h +2
-0@@ -3,10 +3,12 @@#define pr_fmt (fmt) "lkdtm: " fmt +#include <linux/fs.h> #include <linux/kernel.h> /* lkdtm_bugs.c */ void __init lkdtm_bugs_init (int *recur_param); +void __init lkdtm_bugs_init2 (struct dentry *parent);void lkdtm_PANIC (void );void lkdtm_BUG (void );void lkdtm_WARNING (void );drivers/misc/lkdtm_bugs.c +59
-16@@ -5,6 +5,8 @@* test source files. */ #include "lkdtm.h" +#include <linux/debugfs.h> +#include <linux/fs.h> #include <linux/sched.h> /* @@ -35,6 +37,33 @@ static int recursive_loop(int remaining)return recursive_loop (remaining -1 ); } +/* from fs/debugfs/file.c */ +static int debugfs_atomic_long_t_set (void *data,u64 val) +{ +atomic_long_set ((atomic_long_t *)data, val); +return 0 ; +} + +static int debugfs_atomic_long_t_get (void *data,u64 *val) +{ + *val =atomic_long_read ((atomic_long_t *)data); +return 0 ; +} + +DEFINE_DEBUGFS_ATTRIBUTE (fops_atomic_long_t, debugfs_atomic_long_t_get, + debugfs_atomic_long_t_set,"%lld\n" ); + +static struct dentry *debugfs_create_atomic_long_t (const char *name, +umode_t mode, +struct dentry *parent,atomic_long_t *value) +{ +return debugfs_create_file_unsafe (name, mode, parent, value, + &fops_atomic_long_t); +} + +static atomic_t atomic_var =ATOMIC_INIT (0 ); +static atomic_long_t atomic_long_var =ATOMIC_LONG_INIT (0 ); +/* If the depth is negative, use the default, otherwise keep parameter. */ void __init lkdtm_bugs_init (int *recur_param) {@@ -44,6 +73,20 @@ void __init lkdtm_bugs_init(int *recur_param) recur_count = *recur_param; } +void __init lkdtm_bugs_init2 (struct dentry *parent) +{ +struct dentry *de; + + de =debugfs_create_atomic_t ("atomic" ,0644 , parent, &atomic_var); +if (de ==NULL ) +pr_err ("could not create atomic dentry under debugfs\n" ); + + de =debugfs_create_atomic_long_t ("atomic-long" ,0644 , parent, + &atomic_long_var); +if (de ==NULL ) +pr_err ("could not create atomic-long dentry under debugfs\n" ); +} +void lkdtm_PANIC (void ) {panic ("dumptest" );@@ -125,53 +168,53 @@ void lkdtm_HUNG_TASK(void)#define ATOMIC_LKDTM_MIN (tag,fun) void lkdtm_ATOMIC_##tag(void) \ { \ - atomic_t atomic = ATOMIC_INIT(INT_MIN); \ + atomic_set(&atomic_var, INT_MIN); \ \ pr_info("attempting good atomic_" #fun "\n"); \ - atomic_inc(&atomic); \ - TEST_FUNC(&atomic); \ + atomic_inc(&atomic_var); \ + TEST_FUNC(&atomic_var); \ \ pr_info("attempting bad atomic_" #fun "\n"); \ - TEST_FUNC(&atomic); \ + TEST_FUNC(&atomic_var); \ }#define ATOMIC_LKDTM_MAX (tag,fun,...) \ void lkdtm_ATOMIC_##tag(void) \ { \ - atomic_t atomic = ATOMIC_INIT(INT_MAX); \ + atomic_set(&atomic_var, INT_MAX); \ \ pr_info("attempting good atomic_" #fun "\n"); \ - atomic_dec(&atomic); \ - TEST_FUNC(&atomic); \ + atomic_dec(&atomic_var); \ + TEST_FUNC(&atomic_var); \ \ pr_info("attempting bad atomic_" #fun "\n"); \ - TEST_FUNC(&atomic); \ + TEST_FUNC(&atomic_var); \ }#define ATOMIC_LKDTM_LONG_MIN (tag,fun,...) \ void lkdtm_ATOMIC_LONG_##tag(void) \ { \ - atomic_long_t atomic = ATOMIC_LONG_INIT(LONG_MIN); \ + atomic_long_set(&atomic_long_var, LONG_MIN); \ \ pr_info("attempting good atomic_long_" #fun "\n"); \ - atomic_long_inc(&atomic); \ - TEST_FUNC(&atomic); \ + atomic_long_inc(&atomic_long_var); \ + TEST_FUNC(&atomic_long_var); \ \ pr_info("attempting bad atomic_long_" #fun "\n"); \ - TEST_FUNC(&atomic); \ + TEST_FUNC(&atomic_long_var); \ }#define ATOMIC_LKDTM_LONG_MAX (tag,fun,...) \ void lkdtm_ATOMIC_LONG_##tag(void) \ { \ - atomic_long_t atomic = ATOMIC_LONG_INIT(LONG_MAX); \ + atomic_long_set(&atomic_long_var, LONG_MAX); \ \ pr_info("attempting good atomic_long_" #fun "\n"); \ - atomic_long_dec(&atomic); \ - TEST_FUNC(&atomic); \ + atomic_long_dec(&atomic_long_var); \ + TEST_FUNC(&atomic_long_var); \ \ pr_info("attempting bad atomic_long_" #fun "\n"); \ - TEST_FUNC(&atomic); \ + TEST_FUNC(&atomic_long_var); \ }#define TEST_FUNC (x) atomic_dec(x)drivers/misc/lkdtm_core.c +3
-0@@ -536,6 +536,9 @@ static int __init lkdtm_module_init(void)pr_info ("No crash points registered, enable through debugfs\n" ); } +/* misc setup */ +lkdtm_bugs_init2 (lkdtm_debugfs_root); +return 0 ; out_err:Signature · 1 line
2.10.0
Quoted 82 lines · AKASHI Takahiro
Quoted 9 lines · Kees Cook
Quoted 8 lines · Hans Liljestrand
Quoted 6 lines · Kees Cook
Quoted 1 line · Elena
Thank you Kees! I applied the commit to our
hardened_atomic_on_nextbranch and it will be included into the next rfc.Cool, thanks. I assume this should get
atomic64_tandlocal_ttests as well?Quoted 7 lines
Quoted 3 lines
Yes, I'm currently compiling a build with
atomic64_tandlocal_ttests added. With the improved lkdtm macros its much easier to add the extra types, thank you Kees!Sure thing! I may have yet-another patch for this, as I didn't like repeating the same things in three files whenever a new test was added. Moar macro magick!
It would be nice to expose atomic* variables to userspace via debugfs so that we can confirm that the values will not be changed if overflowed. See the attached patch.
We will be able to check the test result:
# /bin/echo ATOMIC_ADD_OVERFLOW > /debug/provoke-crash/DIRECT # echo $? # if [ cat /debug/provoke-crash/atomic -eq INT_MAX ]; then # echo PASS ; fiThanks,
-Takahiro AKASHIQuoted 6 lines
-Kees
--
Kees Cook
Nexus Security===8<===
Fromc516b50b4764c5c1ba0dd39e3a5022d026e35514Mon Sep 17 00:00:00 2001
From: AKASHI Takahiro <[email protected]>
Date: Fri, 28 Oct 2016 10:55:50 +0900
Subject: [PATCH] lkdtm: expose atomic variables via debugfsSigned-off-by AKASHI Takahiro <[email protected]>--- drivers/misc/lkdtm.h | 2 ++ drivers/misc/lkdtm_bugs.c | 75 +++++++++++++++++++++++++++++++++++++---------- drivers/misc/lkdtm_core.c | 3 ++ 3 files changed, 64 insertions(+), 16 deletions(-)drivers/misc/lkdtm.h +2
-0@@ -3,10 +3,12 @@#define pr_fmt (fmt) "lkdtm: " fmt +#include <linux/fs.h> #include <linux/kernel.h> /* lkdtm_bugs.c */ void __init lkdtm_bugs_init (int *recur_param); +void __init lkdtm_bugs_init2 (struct dentry *parent);void lkdtm_PANIC (void );void lkdtm_BUG (void );void lkdtm_WARNING (void );drivers/misc/lkdtm_bugs.c +2
-0@@ -5,6 +5,8 @@* test source files. */ #include "lkdtm.h" +#include <linux/debugfs.h> +#include <linux/fs.h> #include <linux/sched.h> /*
drivers/misc/lkdtm_bugs.c static int recursive_loop(int remaining) · line 45
Quoted 9 lines
drivers/misc/lkdtm_bugs.c +6
-0@@ -35,6 +37,33 @@ static int recursive_loop(int remaining)return recursive_loop (remaining -1 ); } +/* from fs/debugfs/file.c */ +static int debugfs_atomic_long_t_set (void *data,u64 val) +{ +atomic_long_set ((atomic_long_t *)data, val); +return 0 ; +}
Ah yes! Thanks; I had been pondering how to correctly validate that the values were correct after the protection triggered. Thanks!
I'll get a version of this into my hyper-macro-ized version of the lkdtm patch and get it sent to Hans. :)
-Kees
Signature · 2 lines
Kees Cook Nexus Security