emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debbugs-tracker] bug#13391: closed (dd silently ignores lseek error)


From: GNU bug Tracking System
Subject: [debbugs-tracker] bug#13391: closed (dd silently ignores lseek error)
Date: Wed, 09 Jan 2013 01:15:01 +0000

Your message dated Wed, 09 Jan 2013 01:14:22 +0000
with message-id <address@hidden>
and subject line Re: bug#13391: dd silently ignores lseek error
has caused the debbugs.gnu.org bug report #13391,
regarding dd silently ignores lseek error
to be marked as done.

(If you believe you have received this mail in error, please contact
address@hidden)


-- 
13391: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=13391
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: dd silently ignores lseek error Date: Tue, 8 Jan 2013 15:11:22 -0300
Hi all,

While trying to diagnose a weird filesystem bug, I found an error in GNU dd v8.12.

The weird bug is causing lseek() to fail improperly. That's not the problem I'm reporting, though. I was trying to use dd to demonstrate the lseek error to my sysadmin. Instead, I found that dd is ignoring the lseek failure.

Here is the relevant strace output:
$ strace dd if=libdvapp-O.a of=/dev/null bs=33k skip=1
...
open("libdvapp-O.a", O_RDONLY) = 3
dup2(3, 0)                              = 0
close(3)                                = 0
lseek(0, 0, SEEK_CUR)                   = 0
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1)                              = 1
close(3)                                = 0
clock_gettime(CLOCK_MONOTONIC, {12951065, 389531862}) = 0
ioctl(0, MGSL_IOCSTXIDLE or MTIOCGET or SNDCTL_MIDI_MPUCMD, 0x7fbfffe3f0) = -1 ENOTTY (Inappropriate ioctl for device)
lseek(0, 33792, SEEK_CUR)               = -1 EINVAL (Invalid argument)
 ^ this is the syscall which should not be failing
ioctl(0, MGSL_IOCSTXIDLE or MTIOCGET or SNDCTL_MIDI_MPUCMD, 0x7fbfffe3f0) = -1 ENOTTY (Inappropriate ioctl for device)
lseek(0, 0, SEEK_END)                   = -1 EINVAL (Invalid argument)
read(0, "!<arch>\n/               13576110"..., 33792) = 33792
...

Note that it begins reading at the _beginning of the ar file_ -- the 'skip' argument has failed silently. The output of dd does not indicate any error:

3+1 records in
3+1 records out
103310 bytes (103 kB) copied, 0.000375 s, 275 MB/s

Expected behavior: dd should pass on any unexpected errors reported by system calls.

I realize this is an old version of coreutils but I don't have a newer version available to test against the anomaly. Sorry if it's already been fixed.

Regards,
--Neil

--- End Message ---
--- Begin Message --- Subject: Re: bug#13391: dd silently ignores lseek error Date: Wed, 09 Jan 2013 01:14:22 +0000 User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120615 Thunderbird/13.0.1
On 01/08/2013 08:55 PM, Paul Eggert wrote:
On 01/08/13 10:11, Neil Klopfenstein wrote:
Note that it begins reading at the _beginning of the ar file_ -- the 'skip'
argument has failed silently.

But the 'skip' hasn't failed.  It's merely being implemented via 'read'
rather than via 'lseek'.  The records are being skipped correctly.

It might be useful to give dd a new option, which causes it
to insist on lseeking rather than reading in cases like these,
and to report an error if the lseek fails.

I had a look around for a tool to verify
that a file/device supports the seek operation
and couldn't find one.
So this seems like useful functionality.
Worth applying the attached?

thanks,
Pádraig.

Attachment: dd-flag-seekable.diff
Description: Text Data


--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]