ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:105665] [Ruby master Bug#18255] ioctl zeroes the last buffer byte
@ 2021-10-18 21:47 vihai (Daniele Orlandi)
  2021-10-19 11:03 ` [ruby-core:105678] " nobu (Nobuyoshi Nakada)
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: vihai (Daniele Orlandi) @ 2021-10-18 21:47 UTC (permalink / raw)
  To: ruby-core

Issue #18255 has been reported by vihai (Daniele Orlandi).

----------------------------------------
Bug #18255: ioctl zeroes the last buffer byte
https://bugs.ruby-lang.org/issues/18255

* Author: vihai (Daniele Orlandi)
* Status: Open
* Priority: Normal
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------

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
```




-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-10-25  8:13 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-18 21:47 [ruby-core:105665] [Ruby master Bug#18255] ioctl zeroes the last buffer byte vihai (Daniele Orlandi)
2021-10-19 11:03 ` [ruby-core:105678] " nobu (Nobuyoshi Nakada)
2021-10-19 13:32 ` [ruby-core:105680] " vihai (Daniele Orlandi)
2021-10-19 13:58 ` [ruby-core:105681] " nobu (Nobuyoshi Nakada)
2021-10-20  9:51 ` [ruby-core:105691] " vihai (Daniele Orlandi)
2021-10-20 10:56 ` [ruby-core:105693] " nobu (Nobuyoshi Nakada)
2021-10-21 13:34 ` [ruby-core:105734] " vihai (Daniele Orlandi)
2021-10-25  8:13 ` [ruby-core:105776] " nobu (Nobuyoshi Nakada)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).