scp of sysfs file repeats data
Matt Johnston
matt at ucc.asn.au
Tue Jun 23 21:33:56 AWST 2015
I see what you mean. I'll update scp to OpenSSH's latest -
there are a few changes to be merged.
Cheers,
Matt
On Tue, Jun 23, 2015 at 09:11:35AM +0200, Peter Korsgaard wrote:
> >>>>> "Craig" == Craig McQueen <craig.mcqueen at innerrange.com> writes:
>
> > I tried doing scp of a sysfs attribute. I found that it duplicated the
> > data, as well as adding extra NUL bytes. E.g.:
>
> > # scp /sys/class/net/eth0/address localhost:
> > # cat ~/address
> > d0:39:72:53:ef:0e
> > d0:39:72:53:ef:0e
> > # hexdump -C ~/address
> > 00000000 64 30 3a 33 39 3a 37 32 3a 35 33 3a 65 66 3a 30 |d0:39:72:53:ef:0|
> > 00000010 65 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |e...............|
> > 00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
> > *
> > 00000800 64 30 3a 33 39 3a 37 32 3a 35 33 3a 65 66 3a 30 |d0:39:72:53:ef:0|
> > 00000810 65 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |e...............|
> > 00000820 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
> > *
> > 00001000
>
> > Does that seem normal?
>
> No, that looks like a bug. I see it as well here:
>
> strace output looks like this (for a sysfs property called control).
>
> open("control", O_RDONLY|O_LARGEFILE) = 3
> fstat64(3, {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0
> write(6, "C0644 4096 control\n", 19) = 19
> read(3, "auto\n", 2048) = 5
> read(3, "", 2043) = 0
> write(6, "auto\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 2048) = 2048
> read(3, "", 2048) = 0
> write(6, "auto\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 2048) = 2048
>
> The logic in scp.c always tries to copy st_size bytes, but the sysfs
> properties always claim to be 4096 while they in reality are shorter.
>
> I guess the loop in source() needs to be changed to end on error or eof
> instead.
>
> --
> Bye, Peter Korsgaard
More information about the Dropbear
mailing list