Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1736493 > unrolled thread

[PATCH] mm: fix RODATA_TEST failure "rodata_test: test data was not read only"

Started byChristophe Leroy <christophe.leroy@c-s.fr>
First post2017-09-21 11:40 +0200
Last post2017-09-25 21:50 +0200
Articles 5 — 4 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] mm: fix RODATA_TEST failure "rodata_test: test data was not read only" Christophe Leroy <christophe.leroy@c-s.fr> - 2017-09-21 11:40 +0200
    Re: [PATCH] mm: fix RODATA_TEST failure "rodata_test: test data was  not read only" Kees Cook <keescook@chromium.org> - 2017-09-24 21:20 +0200
      Re: [PATCH] mm: fix RODATA_TEST failure "rodata_test: test data was not read only" Segher Boessenkool <segher@kernel.crashing.org> - 2017-09-25 09:40 +0200
        RE: [PATCH] mm: fix RODATA_TEST failure "rodata_test: test data was  not read only" David Laight <David.Laight@ACULAB.COM> - 2017-09-25 18:10 +0200
          Re: [PATCH] mm: fix RODATA_TEST failure "rodata_test: test data was not read only" Segher Boessenkool <segher@kernel.crashing.org> - 2017-09-25 21:50 +0200

#1736493 — [PATCH] mm: fix RODATA_TEST failure "rodata_test: test data was not read only"

FromChristophe Leroy <christophe.leroy@c-s.fr>
Date2017-09-21 11:40 +0200
Subject[PATCH] mm: fix RODATA_TEST failure "rodata_test: test data was not read only"
Message-ID<us67D-7vA-3@gated-at.bofh.it>
On powerpc, RODATA_TEST fails with message the following messages:

[    6.199505] Freeing unused kernel memory: 528K
[    6.203935] rodata_test: test data was not read only

This is because GCC allocates it to .data section:

c0695034 g     O .data	00000004 rodata_test_data

Since commit 056b9d8a76924 ("mm: remove rodata_test_data export,
add pr_fmt"), rodata_test_data is used only inside rodata_test.c
By declaring it static, it gets properly allocated into .rodata
section instead of .data:

c04df710 l     O .rodata	00000004 rodata_test_data

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
---
 mm/rodata_test.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/rodata_test.c b/mm/rodata_test.c
index 6bb4deb12e78..d908c8769b48 100644
--- a/mm/rodata_test.c
+++ b/mm/rodata_test.c
@@ -14,7 +14,7 @@
 #include <linux/uaccess.h>
 #include <asm/sections.h>
 
-const int rodata_test_data = 0xC3;
+static const int rodata_test_data = 0xC3;
 
 void rodata_test(void)
 {
-- 
2.13.3

[toc] | [next] | [standalone]


#1738254 — Re: [PATCH] mm: fix RODATA_TEST failure "rodata_test: test data was not read only"

FromKees Cook <keescook@chromium.org>
Date2017-09-24 21:20 +0200
SubjectRe: [PATCH] mm: fix RODATA_TEST failure "rodata_test: test data was not read only"
Message-ID<utkBz-49N-1@gated-at.bofh.it>
In reply to#1736493
On Thu, Sep 21, 2017 at 2:37 AM, Christophe Leroy
<christophe.leroy@c-s.fr> wrote:
> On powerpc, RODATA_TEST fails with message the following messages:
>
> [    6.199505] Freeing unused kernel memory: 528K
> [    6.203935] rodata_test: test data was not read only
>
> This is because GCC allocates it to .data section:
>
> c0695034 g     O .data  00000004 rodata_test_data

Uuuh... that seems like a compiler bug. It's marked "const" -- it
should never end up in .data. I would argue that this has done exactly
what it was supposed to do, and shows that something has gone wrong.
It should always be const. Adding "static" should just change
visibility. (I'm not opposed to the static change, but it seems to
paper over a problem with the compiler...)

-Kees

>
> Since commit 056b9d8a76924 ("mm: remove rodata_test_data export,
> add pr_fmt"), rodata_test_data is used only inside rodata_test.c
> By declaring it static, it gets properly allocated into .rodata
> section instead of .data:
>
> c04df710 l     O .rodata        00000004 rodata_test_data
>
> Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
> ---
>  mm/rodata_test.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/mm/rodata_test.c b/mm/rodata_test.c
> index 6bb4deb12e78..d908c8769b48 100644
> --- a/mm/rodata_test.c
> +++ b/mm/rodata_test.c
> @@ -14,7 +14,7 @@
>  #include <linux/uaccess.h>
>  #include <asm/sections.h>
>
> -const int rodata_test_data = 0xC3;
> +static const int rodata_test_data = 0xC3;
>
>  void rodata_test(void)
>  {
> --
> 2.13.3
>



-- 
Kees Cook
Pixel Security

[toc] | [prev] | [next] | [standalone]


#1738789

FromSegher Boessenkool <segher@kernel.crashing.org>
Date2017-09-25 09:40 +0200
Message-ID<utw9I-3eX-11@gated-at.bofh.it>
In reply to#1738254
On Sun, Sep 24, 2017 at 12:17:51PM -0700, Kees Cook wrote:
> On Thu, Sep 21, 2017 at 2:37 AM, Christophe Leroy
> <christophe.leroy@c-s.fr> wrote:
> > On powerpc, RODATA_TEST fails with message the following messages:
> >
> > [    6.199505] Freeing unused kernel memory: 528K
> > [    6.203935] rodata_test: test data was not read only
> >
> > This is because GCC allocates it to .data section:
> >
> > c0695034 g     O .data  00000004 rodata_test_data
> 
> Uuuh... that seems like a compiler bug. It's marked "const" -- it
> should never end up in .data. I would argue that this has done exactly
> what it was supposed to do, and shows that something has gone wrong.
> It should always be const. Adding "static" should just change
> visibility. (I'm not opposed to the static change, but it seems to
> paper over a problem with the compiler...)

The compiler puts this item in .sdata, for 32-bit.  There is no .srodata,
so if it wants to use a small data section, it must use .sdata .

Non-external, non-referenced symbols are not put in .sdata, that is the
difference you see with the "static".

I don't think there is a bug here.  If you think there is, please open
a GCC bug.


Segher

[toc] | [prev] | [next] | [standalone]


#1739143 — RE: [PATCH] mm: fix RODATA_TEST failure "rodata_test: test data was not read only"

FromDavid Laight <David.Laight@ACULAB.COM>
Date2017-09-25 18:10 +0200
SubjectRE: [PATCH] mm: fix RODATA_TEST failure "rodata_test: test data was not read only"
Message-ID<utE7g-fi-23@gated-at.bofh.it>
In reply to#1738789
From: Segher Boessenkool
> Sent: 25 September 2017 08:37
> On Sun, Sep 24, 2017 at 12:17:51PM -0700, Kees Cook wrote:
> > On Thu, Sep 21, 2017 at 2:37 AM, Christophe Leroy
> > <christophe.leroy@c-s.fr> wrote:
> > > On powerpc, RODATA_TEST fails with message the following messages:
> > >
> > > [    6.199505] Freeing unused kernel memory: 528K
> > > [    6.203935] rodata_test: test data was not read only
> > >
> > > This is because GCC allocates it to .data section:
> > >
> > > c0695034 g     O .data  00000004 rodata_test_data
> >
> > Uuuh... that seems like a compiler bug. It's marked "const" -- it
> > should never end up in .data. I would argue that this has done exactly
> > what it was supposed to do, and shows that something has gone wrong.
> > It should always be const. Adding "static" should just change
> > visibility. (I'm not opposed to the static change, but it seems to
> > paper over a problem with the compiler...)
> 
> The compiler puts this item in .sdata, for 32-bit.  There is no .srodata,
> so if it wants to use a small data section, it must use .sdata .
> 
> Non-external, non-referenced symbols are not put in .sdata, that is the
> difference you see with the "static".
> 
> I don't think there is a bug here.  If you think there is, please open
> a GCC bug.

The .sxxx sections are for 'small' data that can be accessed (typically)
using small offsets from a global register.
This means that all sections must be adjacent in the image.
So you can't really have readonly small data.

My guess is that the linker script is putting .srodata in with .sdata.

	David

[toc] | [prev] | [next] | [standalone]


#1739250

FromSegher Boessenkool <segher@kernel.crashing.org>
Date2017-09-25 21:50 +0200
Message-ID<utHya-2oD-17@gated-at.bofh.it>
In reply to#1739143
On Mon, Sep 25, 2017 at 04:01:55PM +0000, David Laight wrote:
> From: Segher Boessenkool
> > The compiler puts this item in .sdata, for 32-bit.  There is no .srodata,
> > so if it wants to use a small data section, it must use .sdata .
> > 
> > Non-external, non-referenced symbols are not put in .sdata, that is the
> > difference you see with the "static".
> > 
> > I don't think there is a bug here.  If you think there is, please open
> > a GCC bug.
> 
> The .sxxx sections are for 'small' data that can be accessed (typically)
> using small offsets from a global register.
> This means that all sections must be adjacent in the image.
> So you can't really have readonly small data.
> 
> My guess is that the linker script is putting .srodata in with .sdata.

.srodata does not *exist* (in the ABI).


Segher

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web