2012-02-22 05:30:28

by Bobby Powers

[permalink] [raw]
Subject: [PATCH tip/x86/x32] fs: fix close_on_exec pointer in alloc_fdtable

alloc_fdtable allocates space for the open_fds and close_on_exec
bitfields together, as 2 * nr / BITS_PER_BYTE. close_on_exec needs to
point to open_fds + nr / BITS_PER_BYTE, not open_fds + nr /
BITS_PER_LONG, as introducted in 1fd36adc: Replace the fd_sets in
struct fdtable with an array of unsigned longs.

Signed-off-by: Bobby Powers <[email protected]>
---
fs/file.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/fs/file.c b/fs/file.c
index 2d479dd..171f6b4 100644
--- a/fs/file.c
+++ b/fs/file.c
@@ -179,7 +179,7 @@ static struct fdtable * alloc_fdtable(unsigned int nr)
if (!data)
goto out_arr;
fdt->open_fds = data;
- data += nr / BITS_PER_LONG;
+ data += nr / BITS_PER_BYTE;
fdt->close_on_exec = data;
fdt->next = NULL;

--
1.7.7.6


2012-02-22 10:19:05

by David Howells

[permalink] [raw]
Subject: Re: [PATCH tip/x86/x32] fs: fix close_on_exec pointer in alloc_fdtable

Bobby Powers <[email protected]> wrote:

> alloc_fdtable allocates space for the open_fds and close_on_exec
> bitfields together, as 2 * nr / BITS_PER_BYTE. close_on_exec needs to
> point to open_fds + nr / BITS_PER_BYTE, not open_fds + nr /
> BITS_PER_LONG, as introducted in 1fd36adc: Replace the fd_sets in
> struct fdtable with an array of unsigned longs.
>
> Signed-off-by: Bobby Powers <[email protected]>

Yes, you're right. At one point I changed data to be an unsigned long *.

Acked-by: David Howells <[email protected]>

2012-02-23 14:40:36

by Bobby Powers

[permalink] [raw]
Subject: Re: [PATCH tip/x86/x32] fs: fix close_on_exec pointer in alloc_fdtable

On Wed, Feb 22, 2012 at 5:18 AM, David Howells <[email protected]> wrote:
> Bobby Powers <[email protected]> wrote:
>
>> alloc_fdtable allocates space for the open_fds and close_on_exec
>> bitfields together, as 2 * nr / BITS_PER_BYTE. ?close_on_exec needs to
>> point to open_fds + nr / BITS_PER_BYTE, not open_fds + nr /
>> BITS_PER_LONG, as introducted in 1fd36adc: Replace the fd_sets in
>> struct fdtable with an array of unsigned longs.
>>
>> Signed-off-by: Bobby Powers <[email protected]>
>
> Yes, you're right. ?At one point I changed data to be an unsigned long *.
>
> Acked-by: David Howells <[email protected]>

Thanks, its nice to have confirmation - I'm still pretty new at this.
Can this get pulled onto tip/x86/x32? Desktop applications like
firefox and chrome don't work reliably without it.

2012-02-23 14:57:01

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [PATCH tip/x86/x32] fs: fix close_on_exec pointer in alloc_fdtable

On 02/23/2012 06:40 AM, Bobby Powers wrote:
> On Wed, Feb 22, 2012 at 5:18 AM, David Howells<[email protected]> wrote:
>> Bobby Powers<[email protected]> wrote:
>>
>>> alloc_fdtable allocates space for the open_fds and close_on_exec
>>> bitfields together, as 2 * nr / BITS_PER_BYTE. close_on_exec needs to
>>> point to open_fds + nr / BITS_PER_BYTE, not open_fds + nr /
>>> BITS_PER_LONG, as introducted in 1fd36adc: Replace the fd_sets in
>>> struct fdtable with an array of unsigned longs.
>>>
>>> Signed-off-by: Bobby Powers<[email protected]>
>>
>> Yes, you're right. At one point I changed data to be an unsigned long *.
>>
>> Acked-by: David Howells<[email protected]>
>
> Thanks, its nice to have confirmation - I'm still pretty new at this.
> Can this get pulled onto tip/x86/x32? Desktop applications like
> firefox and chrome don't work reliably without it.
>

tip:core/types (and the updated core/types needs to be merged into
x86/x32) but yes.

-hpa

2012-02-24 02:43:23

by Bobby Powers

[permalink] [raw]
Subject: [tip:core/types] fs: Fix close_on_exec pointer in alloc_fdtable

Commit-ID: f044db4cb4bf16893812d35b5fbeaaf3e30c9215
Gitweb: http://git.kernel.org/tip/f044db4cb4bf16893812d35b5fbeaaf3e30c9215
Author: Bobby Powers <[email protected]>
AuthorDate: Wed, 22 Feb 2012 00:29:47 -0500
Committer: H. Peter Anvin <[email protected]>
CommitDate: Thu, 23 Feb 2012 18:28:52 -0800

fs: Fix close_on_exec pointer in alloc_fdtable

alloc_fdtable allocates space for the open_fds and close_on_exec
bitfields together, as 2 * nr / BITS_PER_BYTE. close_on_exec needs to
point to open_fds + nr / BITS_PER_BYTE, not open_fds + nr /
BITS_PER_LONG, as introducted in 1fd36adc: Replace the fd_sets in
struct fdtable with an array of unsigned longs.

Signed-off-by: Bobby Powers <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
Acked-by: David Howells <[email protected]>
Signed-off-by: H. Peter Anvin <[email protected]>
---
fs/file.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/fs/file.c b/fs/file.c
index 2d479dd..171f6b4 100644
--- a/fs/file.c
+++ b/fs/file.c
@@ -179,7 +179,7 @@ static struct fdtable * alloc_fdtable(unsigned int nr)
if (!data)
goto out_arr;
fdt->open_fds = data;
- data += nr / BITS_PER_LONG;
+ data += nr / BITS_PER_BYTE;
fdt->close_on_exec = data;
fdt->next = NULL;