Actions
Bug #18255
openioctl zeroes the last buffer byte
Description
Hello,
I'm running ruby 2.7.4p191 on an armv7 linux and experimenting with GPIO_GET_LINEHANDLE_IOCTL ioctl.
The ioctl sanity check is triggered as if the buffer was too small however the size of the buffer passed to ioctl is correct.
io.rb:116:in `ioctl': return value overflowed string (ArgumentError)
If I append at least one byte to the buffer the ioctl does not raise an exception.
It seems that the last byte of the buffer is zeroed:
puts "SIZE=#{req.bytesize}"
req = req + "XXXXXXXXXX".b
puts req.unpack("H*")
fd.ioctl(GPIO_GET_LINEHANDLE_IOCTL, req)
puts req.unpack("H*")
SIZE=364
[...]0000000000000058585858585858585858
[...]0000000600000058585858585858585800
I checked with a C program and the ioctl does not actually touch the buffer beyond the expected 364 bytes.
The ioctl number does encode 364 as size:
#include <stdio.h>
#include <linux/gpio.h>
void main()
{
printf("SIZE=%d", _IOC_SIZE(GPIO_GET_LINEHANDLE_IOCTL));
}
SIZE=364
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0