[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <435E586E-2045-4070-8FA7-8DF468280E3C@cam.ac.uk>
Date: Fri, 8 Aug 2014 00:11:39 +0100
From: Anton Altaparmakov <aia21@....ac.uk>
To: Al Viro <viro@...iv.linux.org.uk>
Cc: linux-fsdevel <linux-fsdevel@...r.kernel.org>,
linux-kernel <linux-kernel@...r.kernel.org>
Subject: Bug introduced in 3b93f911d5
Hi Al,
Was just looking at __generic_file_write_iter() and found a bug in the code that you added in 3b93f911d5.
Consider the case where generic_file_direct_write() returns a partial write, i.e. written > 0 && written < count.
Also consider that the following generic_perform_write() fails with an error, i.e. status < 0.
This code then does something very bogus:
if (unlikely(status < 0) && !written) {
err = status;
goto out;
}
iocb->ki_pos = pos + status;
...
endbyte = pos + status - 1;
The if condition is false as written is > 0 yet status is negative thus iocb->ki_pos is set to pos + status where status is negative thus ki_pos is actually set to "pos - random value".
And similar for "endbyte" being set to "pos - random value - 1", etc.
Doesn't seem like that is what you intended?
Best regards,
Anton
--
Anton Altaparmakov <aia21 at cam.ac.uk> (replace at with @)
University of Cambridge Information Services, Roger Needham Building
7 JJ Thomson Avenue, Cambridge, CB3 0RB, UK
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists