2007-08-14 10:23:30

by Nicolas George

[permalink] [raw]
Subject:

Cc:
Bcc:
Subject: Re: UML/man: BLKGETSIZE takes a long, not an int
Reply-To:
In-Reply-To: <[email protected]>

Hi.

I fear that my bug-report yesterday was very badly written, with me writing
to the wrong mailing-list and all.

I was saying:

> I found a type mismatch in UML that makes host block devices unusable as ubd
> devices on x86_64 and other 64 bits systems (segfault of the mm subsystem):
>
> In block/ioctl.c, the following lines show that the BLKGETSIZE ioctl expects
> a pointer to a long:
>
> case BLKGETSIZE:
> if ((bdev->bd_inode->i_size >> 9) > ~0UL)
> return -EFBIG;
> return put_ulong(arg, bdev->bd_inode->i_size >> 9);
>
> In arch/um/os-Linux/file.c, os_file_size calls it with an int.
>
> The ioctl_list man page should be fixed as well.

I add that the bug was still there yesterday in the git repository.

I join the patch to file.c.

Regards,

--
Nicolas George


Attachments:
(No filename) (0.00 B)
signature.asc (185.00 B)
Digital signature
Download all attachments

2007-08-27 13:27:59

by Michael Kerrisk

[permalink] [raw]
Subject: Re: UML/man: BLKGETSIZE takes a long, not an int

Hello Nicolas,

> I fear that my bug-report yesterday was very badly written, with me writing
> to the wrong mailing-list and all.
>
> I was saying:
>
>> I found a type mismatch in UML that makes host block devices unusable as ubd
>> devices on x86_64 and other 64 bits systems (segfault of the mm subsystem):
>>
>> In block/ioctl.c, the following lines show that the BLKGETSIZE ioctl expects
>> a pointer to a long:
>>
>> case BLKGETSIZE:
>> if ((bdev->bd_inode->i_size >> 9) > ~0UL)
>> return -EFBIG;
>> return put_ulong(arg, bdev->bd_inode->i_size >> 9);
>>
>> In arch/um/os-Linux/file.c, os_file_size calls it with an int.
>>
>> The ioctl_list man page should be fixed as well.

manual page changed for 2.65:

--- ioctl_list.2
+++ ioctl_list.2 (working copy)
@@ -243,7 +243,7 @@
0x0000125D BLKROSET const int *
0x0000125E BLKROGET int *
0x0000125F BLKRRPART void
-0x00001260 BLKGETSIZE int *
+0x00001260 BLKGETSIZE unsigned long *
0x00001261 BLKFLSBUF void
0x00001262 BLKRASET int
0x00001263 BLKRAGET int *

Thanks,

Michael

--
Michael Kerrisk
maintainer of Linux man pages Sections 2, 3, 4, 5, and 7

Want to help with man page maintenance? Grab the latest tarball at
http://www.kernel.org/pub/linux/docs/manpages/
read the HOWTOHELP file and grep the source files for 'FIXME'.