https://github.com/torvalds/linux
Revision b928095b0a7cff7fb9fcf4c706348ceb8ab2c295 authored by Miklos Szeredi on 24 September 2014, 15:56:17 UTC, committed by Al Viro on 27 September 2014, 01:16:42 UTC
If overwriting an empty directory with rename, then need to drop the extra
nlink.

Test prog:

#include <stdio.h>
#include <fcntl.h>
#include <err.h>
#include <sys/stat.h>

int main(void)
{
	const char *test_dir1 = "test-dir1";
	const char *test_dir2 = "test-dir2";
	int res;
	int fd;
	struct stat statbuf;

	res = mkdir(test_dir1, 0777);
	if (res == -1)
		err(1, "mkdir(\"%s\")", test_dir1);

	res = mkdir(test_dir2, 0777);
	if (res == -1)
		err(1, "mkdir(\"%s\")", test_dir2);

	fd = open(test_dir2, O_RDONLY);
	if (fd == -1)
		err(1, "open(\"%s\")", test_dir2);

	res = rename(test_dir1, test_dir2);
	if (res == -1)
		err(1, "rename(\"%s\", \"%s\")", test_dir1, test_dir2);

	res = fstat(fd, &statbuf);
	if (res == -1)
		err(1, "fstat(%i)", fd);

	if (statbuf.st_nlink != 0) {
		fprintf(stderr, "nlink is %lu, should be 0\n", statbuf.st_nlink);
		return 1;
	}

	return 0;
}

Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Cc: stable@vger.kernel.org
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
1 parent 0f33be0
History
Tip revision: b928095b0a7cff7fb9fcf4c706348ceb8ab2c295 authored by Miklos Szeredi on 24 September 2014, 15:56:17 UTC
shmem: fix nlink for rename overwrite directory
Tip revision: b928095
File Mode Size
Kconfig -rw-r--r-- 20.8 KB
Kconfig.debug -rw-r--r-- 1015 bytes
Makefile -rw-r--r-- 2.2 KB
backing-dev.c -rw-r--r-- 16.7 KB
balloon_compaction.c -rw-r--r-- 9.7 KB
bootmem.c -rw-r--r-- 20.8 KB
cleancache.c -rw-r--r-- 12.7 KB
cma.c -rw-r--r-- 8.7 KB
compaction.c -rw-r--r-- 34.8 KB
debug-pagealloc.c -rw-r--r-- 2.1 KB
dmapool.c -rw-r--r-- 13.0 KB
early_ioremap.c -rw-r--r-- 5.4 KB
fadvise.c -rw-r--r-- 3.6 KB
failslab.c -rw-r--r-- 1.3 KB
filemap.c -rw-r--r-- 70.4 KB
filemap_xip.c -rw-r--r-- 11.3 KB
fremap.c -rw-r--r-- 7.3 KB
frontswap.c -rw-r--r-- 13.4 KB
gup.c -rw-r--r-- 20.6 KB
highmem.c -rw-r--r-- 11.8 KB
huge_memory.c -rw-r--r-- 78.2 KB
hugetlb.c -rw-r--r-- 98.0 KB
hugetlb_cgroup.c -rw-r--r-- 10.3 KB
hwpoison-inject.c -rw-r--r-- 3.3 KB
init-mm.c -rw-r--r-- 619 bytes
internal.h -rw-r--r-- 11.4 KB
interval_tree.c -rw-r--r-- 3.2 KB
iov_iter.c -rw-r--r-- 16.6 KB
kmemcheck.c -rw-r--r-- 2.8 KB
kmemleak-test.c -rw-r--r-- 3.2 KB
kmemleak.c -rw-r--r-- 53.2 KB
ksm.c -rw-r--r-- 63.3 KB
list_lru.c -rw-r--r-- 3.4 KB
maccess.c -rw-r--r-- 1.6 KB
madvise.c -rw-r--r-- 14.1 KB
memblock.c -rw-r--r-- 44.7 KB
memcontrol.c -rw-r--r-- 176.6 KB
memory-failure.c -rw-r--r-- 47.8 KB
memory.c -rw-r--r-- 102.2 KB
memory_hotplug.c -rw-r--r-- 50.8 KB
mempolicy.c -rw-r--r-- 71.5 KB
mempool.c -rw-r--r-- 10.7 KB
migrate.c -rw-r--r-- 49.1 KB
mincore.c -rw-r--r-- 7.8 KB
mlock.c -rw-r--r-- 22.8 KB
mm_init.c -rw-r--r-- 5.0 KB
mmap.c -rw-r--r-- 88.1 KB
mmu_context.c -rw-r--r-- 1.3 KB
mmu_notifier.c -rw-r--r-- 10.5 KB
mmzone.c -rw-r--r-- 2.4 KB
mprotect.c -rw-r--r-- 10.7 KB
mremap.c -rw-r--r-- 15.0 KB
msync.c -rw-r--r-- 2.7 KB
nobootmem.c -rw-r--r-- 10.8 KB
nommu.c -rw-r--r-- 53.4 KB
oom_kill.c -rw-r--r-- 19.7 KB
page-writeback.c -rw-r--r-- 74.5 KB
page_alloc.c -rw-r--r-- 184.4 KB
page_cgroup.c -rw-r--r-- 12.0 KB
page_io.c -rw-r--r-- 9.5 KB
page_isolation.c -rw-r--r-- 7.5 KB
pagewalk.c -rw-r--r-- 5.9 KB
percpu-km.c -rw-r--r-- 2.8 KB
percpu-vm.c -rw-r--r-- 13.1 KB
percpu.c -rw-r--r-- 57.0 KB
pgtable-generic.c -rw-r--r-- 5.2 KB
process_vm_access.c -rw-r--r-- 10.2 KB
quicklist.c -rw-r--r-- 2.4 KB
readahead.c -rw-r--r-- 15.6 KB
rmap.c -rw-r--r-- 48.3 KB
shmem.c -rw-r--r-- 88.9 KB
slab.c -rw-r--r-- 109.3 KB
slab.h -rw-r--r-- 8.5 KB
slab_common.c -rw-r--r-- 20.3 KB
slob.c -rw-r--r-- 15.7 KB
slub.c -rw-r--r-- 126.2 KB
sparse-vmemmap.c -rw-r--r-- 6.0 KB
sparse.c -rw-r--r-- 20.9 KB
swap.c -rw-r--r-- 31.7 KB
swap_state.c -rw-r--r-- 12.9 KB
swapfile.c -rw-r--r-- 77.0 KB
truncate.c -rw-r--r-- 22.5 KB
util.c -rw-r--r-- 9.4 KB
vmacache.c -rw-r--r-- 3.1 KB
vmalloc.c -rw-r--r-- 68.3 KB
vmpressure.c -rw-r--r-- 11.4 KB
vmscan.c -rw-r--r-- 110.1 KB
vmstat.c -rw-r--r-- 35.4 KB
workingset.c -rw-r--r-- 13.6 KB
zbud.c -rw-r--r-- 17.7 KB
zpool.c -rw-r--r-- 9.5 KB
zsmalloc.c -rw-r--r-- 30.3 KB
zswap.c -rw-r--r-- 24.9 KB

back to top