2001-10-27 23:38:25

by Herbert Xu

[permalink] [raw]
Subject: [PATCH] tmpfs symlink size bug

Since 2.4.12 the size of symlinks on tmpfs has been off by one. The
following patch corrects that error.
--
Debian GNU/Linux 2.2 is out! ( http://www.debian.org/ )
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt


Attachments:
(No filename) (330.00 B)
p (543.00 B)
Download all attachments

2001-10-29 08:50:02

by Christoph Rohland

[permalink] [raw]
Subject: Re: [PATCH] tmpfs symlink size bug

Hi Herbert,

On Sun, 28 Oct 2001, Herbert Xu wrote:
> Since 2.4.12 the size of symlinks on tmpfs has been off by one. The
> following patch corrects that error.

Thanks for spotting. I prefer the following patch.

Alan, Linus, please apply.

Greetings
Christoph

--- 2.4.13/mm/shmem.c Sun Oct 28 16:59:03 2001
+++ t2.4.13/mm/shmem.c Mon Oct 29 09:45:51 2001
@@ -1151,16 +1151,16 @@
if (error)
return error;

- len = strlen(symname) + 1;
- if (len > PAGE_CACHE_SIZE)
+ len = strlen(symname);
+ if (len >= PAGE_CACHE_SIZE)
return -ENAMETOOLONG;

inode = dentry->d_inode;
info = SHMEM_I(inode);
inode->i_size = len;
- if (len <= sizeof(struct shmem_inode_info)) {
+ if (len < sizeof(struct shmem_inode_info)) {
/* do it inline */
- memcpy(info, symname, len);
+ memcpy(info, symname, len + 1);
inode->i_op = &shmem_symlink_inline_operations;
} else {
spin_lock (&shmem_ilock);
@@ -1173,7 +1173,7 @@
return PTR_ERR(page);
}
kaddr = kmap(page);
- memcpy(kaddr, symname, len);
+ memcpy(kaddr, symname, len + 1);
kunmap(page);
SetPageDirty(page);
UnlockPage(page);