Thread (64 messages) 64 messages, 10 authors, 2018-05-17

Re: [PATCH 10/33] iomap: add an iomap-based bmap implementation

flat view

From: Darrick J. Wong <hidden>
Date: 2018-05-12 01:56:38
Also in: linux-fsdevel, linux-mm, linux-xfs

On Fri, May 11, 2018 at 08:25:27AM +0200, Christoph Hellwig wrote:
On Thu, May 10, 2018 at 08:08:38AM -0700, Darrick J. Wong wrote:
quoted
quoted
quoted
quoted
+	sector_t *bno = data;
+
+	if (iomap->type == IOMAP_MAPPED)
+		*bno = (iomap->addr + pos - iomap->offset) >> inode->i_blkbits;
Does this need to be careful w.r.t. overflow on systems where sector_t
is a 32-bit unsigned long?

Also, ioctl_fibmap() typecasts the returned sector_t to an int, which
also seems broken.  I agree the interface needs to die, but ioctls take
a long time to deprecate.
Not much we can do about the interface.
Yes, the interface is fubar, but if file /foo maps to block 8589934720
then do we return the truncated result 128?
Then we'll get a corrupt result.  What do you think we could do here
eithere in the old or new code?
I think the only thing we /can/ do is figure out if we'd be truncating
the result, dump a warning to the kernel, and return 0, because we don't
want smartypants FIBMAP callers to be using crap block pointers.

Something like this for the bmap implementation...

uint64_t mapping = iomap->addr;

#ifdef CONFIG_LBDAF
if (mapping > ULONG_MAX) {
	/* Do not truncate results. */
	return 0;
}
#endif

...and in the bmap ioctl...

sector_t mapping = ...;

if (mapping > INT_MAX) {
	WARN(1, "would truncate bmap result, go fix your stupid program");
	return 0;
}

--D
--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help