2014-07-22 19:04:05

by Ian Kumlien

[permalink] [raw]
Subject: [RFC] 3.16-rc6 -- fs/direct-io.c:1011 from and to uninitialized.

This is a resend, try two...

---
Hi,

While playing around compiling the kernel i noticed the following:
fs/direct-io.c: In function ‘do_blockdev_direct_IO’:
fs/direct-io.c:1022:29: warning: ‘from’ may be used uninitialized in
this function [-Wmaybe-uninitialized]
ret = submit_page_section(dio, sdio, page,
^
fs/direct-io.c:913:10: note: ‘from’ was declared here
size_t from, to;
^
fs/direct-io.c:1011:12: warning: ‘to’ may be used uninitialized in this
function [-Wmaybe-uninitialized]
u = (to - from) >> blkbits;
^
fs/direct-io.c:913:16: note: ‘to’ was declared here
size_t from, to;
^
---


And while the fix is simple, something along the lines of:
diff --git a/fs/direct-io.c b/fs/direct-io.c
index 98040ba..64a8286 100644
--- a/fs/direct-io.c
+++ b/fs/direct-io.c
@@ -910,7 +910,7 @@ static int do_direct_IO(struct dio *dio, struct
dio_submit *sdi

while (sdio->block_in_file < sdio->final_block_in_request) {
struct page *page;
- size_t from, to;
+ size_t from, to = {0};
page = dio_get_page(dio, sdio, &from, &to);
if (IS_ERR(page)) {
ret = PTR_ERR(page);
---

I however don't know if it's in the correct C standard, it compiles fine
though... (or if this is more gcc speific)




Attachments:
direct-io-init.patch (1.49 kB)

2014-07-22 19:12:43

by Richard Weinberger

[permalink] [raw]
Subject: Re: [RFC] 3.16-rc6 -- fs/direct-io.c:1011 from and to uninitialized.

On Tue, Jul 22, 2014 at 9:03 PM, Ian Kumlien <[email protected]> wrote:
> This is a resend, try two...

Please see "[PATCH v3] direct-io: fix uninitialized warning in do_direct_IO()".

> ---
> Hi,
>
> While playing around compiling the kernel i noticed the following:
> fs/direct-io.c: In function ‘do_blockdev_direct_IO’:
> fs/direct-io.c:1022:29: warning: ‘from’ may be used uninitialized in
> this function [-Wmaybe-uninitialized]
> ret = submit_page_section(dio, sdio, page,
> ^
> fs/direct-io.c:913:10: note: ‘from’ was declared here
> size_t from, to;
> ^
> fs/direct-io.c:1011:12: warning: ‘to’ may be used uninitialized in this
> function [-Wmaybe-uninitialized]
> u = (to - from) >> blkbits;
> ^
> fs/direct-io.c:913:16: note: ‘to’ was declared here
> size_t from, to;
> ^
> ---
>
>
> And while the fix is simple, something along the lines of:
> diff --git a/fs/direct-io.c b/fs/direct-io.c
> index 98040ba..64a8286 100644
> --- a/fs/direct-io.c
> +++ b/fs/direct-io.c
> @@ -910,7 +910,7 @@ static int do_direct_IO(struct dio *dio, struct
> dio_submit *sdi
>
> while (sdio->block_in_file < sdio->final_block_in_request) {
> struct page *page;
> - size_t from, to;
> + size_t from, to = {0};
> page = dio_get_page(dio, sdio, &from, &to);
> if (IS_ERR(page)) {
> ret = PTR_ERR(page);
> ---
>
> I however don't know if it's in the correct C standard, it compiles fine
> though... (or if this is more gcc speific)
>
>
>



--
Thanks,
//richard

2014-07-22 19:18:53

by Ian Kumlien

[permalink] [raw]
Subject: Re: [RFC] 3.16-rc6 -- fs/direct-io.c:1011 from and to uninitialized.

On tis, 2014-07-22 at 21:12 +0200, Richard Weinberger wrote:
> On Tue, Jul 22, 2014 at 9:03 PM, Ian Kumlien <[email protected]> wrote:
> > This is a resend, try two...
>
> Please see "[PATCH v3] direct-io: fix uninitialized warning in do_direct_IO()".

That looks like a better approach, couldn't find it before i started
sending this and my emails are autofiltered if you send via the web
ui.. ;)

> > ---
> > Hi,
> >
> > While playing around compiling the kernel i noticed the following:
> > fs/direct-io.c: In function ‘do_blockdev_direct_IO’:
> > fs/direct-io.c:1022:29: warning: ‘from’ may be used uninitialized in
> > this function [-Wmaybe-uninitialized]
> > ret = submit_page_section(dio, sdio, page,
> > ^
> > fs/direct-io.c:913:10: note: ‘from’ was declared here
> > size_t from, to;
> > ^
> > fs/direct-io.c:1011:12: warning: ‘to’ may be used uninitialized in this
> > function [-Wmaybe-uninitialized]
> > u = (to - from) >> blkbits;
> > ^
> > fs/direct-io.c:913:16: note: ‘to’ was declared here
> > size_t from, to;
> > ^
> > ---
> >
> >
> > And while the fix is simple, something along the lines of:
> > diff --git a/fs/direct-io.c b/fs/direct-io.c
> > index 98040ba..64a8286 100644
> > --- a/fs/direct-io.c
> > +++ b/fs/direct-io.c
> > @@ -910,7 +910,7 @@ static int do_direct_IO(struct dio *dio, struct
> > dio_submit *sdi
> >
> > while (sdio->block_in_file < sdio->final_block_in_request) {
> > struct page *page;
> > - size_t from, to;
> > + size_t from, to = {0};
> > page = dio_get_page(dio, sdio, &from, &to);
> > if (IS_ERR(page)) {
> > ret = PTR_ERR(page);
> > ---
> >
> > I however don't know if it's in the correct C standard, it compiles fine
> > though... (or if this is more gcc speific)
> >
> >
> >
>
>
>

2014-07-22 19:20:21

by Randy Dunlap

[permalink] [raw]
Subject: Re: [RFC] 3.16-rc6 -- fs/direct-io.c:1011 from and to uninitialized.

On 07/22/2014 12:03 PM, Ian Kumlien wrote:
> This is a resend, try two...
>
> ---
> Hi,
>
> While playing around compiling the kernel i noticed the following:
> fs/direct-io.c: In function ‘do_blockdev_direct_IO’:
> fs/direct-io.c:1022:29: warning: ‘from’ may be used uninitialized in
> this function [-Wmaybe-uninitialized]
> ret = submit_page_section(dio, sdio, page,
> ^
> fs/direct-io.c:913:10: note: ‘from’ was declared here
> size_t from, to;
> ^
> fs/direct-io.c:1011:12: warning: ‘to’ may be used uninitialized in this
> function [-Wmaybe-uninitialized]
> u = (to - from) >> blkbits;
> ^
> fs/direct-io.c:913:16: note: ‘to’ was declared here
> size_t from, to;
> ^
> ---
>
>
> And while the fix is simple, something along the lines of:
> diff --git a/fs/direct-io.c b/fs/direct-io.c
> index 98040ba..64a8286 100644
> --- a/fs/direct-io.c
> +++ b/fs/direct-io.c
> @@ -910,7 +910,7 @@ static int do_direct_IO(struct dio *dio, struct
> dio_submit *sdi
>
> while (sdio->block_in_file < sdio->final_block_in_request) {
> struct page *page;
> - size_t from, to;
> + size_t from, to = {0};
> page = dio_get_page(dio, sdio, &from, &to);
> if (IS_ERR(page)) {
> ret = PTR_ERR(page);
> ---
>
> I however don't know if it's in the correct C standard, it compiles fine
> though... (or if this is more gcc speific)

so... do you know C or not?

Why the braces around the 0?

Why do you initialize 'to' but not 'from'?


--
~Randy

2014-07-22 19:24:03

by Ian Kumlien

[permalink] [raw]
Subject: Re: [RFC] 3.16-rc6 -- fs/direct-io.c:1011 from and to uninitialized.

On tis, 2014-07-22 at 12:20 -0700, Randy Dunlap wrote:
> On 07/22/2014 12:03 PM, Ian Kumlien wrote:
> > This is a resend, try two...
> >
> > And while the fix is simple, something along the lines of:
> > diff --git a/fs/direct-io.c b/fs/direct-io.c
> > index 98040ba..64a8286 100644
> > --- a/fs/direct-io.c
> > +++ b/fs/direct-io.c
> > @@ -910,7 +910,7 @@ static int do_direct_IO(struct dio *dio, struct
> > dio_submit *sdi
> >
> > while (sdio->block_in_file < sdio->final_block_in_request) {
> > struct page *page;
> > - size_t from, to;
> > + size_t from, to = {0};
> > page = dio_get_page(dio, sdio, &from, &to);
> > if (IS_ERR(page)) {
> > ret = PTR_ERR(page);
> > ---
> >
> > I however don't know if it's in the correct C standard, it compiles fine
> > though... (or if this is more gcc speific)
>
> so... do you know C or not?

I know C but i don't know if this got added in C99 or C11 or how they
denote it.

> Why the braces around the 0?

Because it's special

> Why do you initialize 'to' but not 'from'?

The magic of {0} is that it will initialize all your values.