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
netfilter
Kconfig -rw-r--r-- 20.9 KB
Makefile -rw-r--r-- 2.4 KB
af_inet.c -rw-r--r-- 44.7 KB
ah4.c -rw-r--r-- 13.5 KB
arp.c -rw-r--r-- 35.4 KB
cipso_ipv4.c -rw-r--r-- 62.8 KB
datagram.c -rw-r--r-- 3.0 KB
devinet.c -rw-r--r-- 57.8 KB
esp4.c -rw-r--r-- 16.4 KB
fib_frontend.c -rw-r--r-- 27.2 KB
fib_lookup.h -rw-r--r-- 1.4 KB
fib_rules.c -rw-r--r-- 8.0 KB
fib_semantics.c -rw-r--r-- 31.0 KB
fib_trie.c -rw-r--r-- 60.8 KB
gre_demux.c -rw-r--r-- 8.2 KB
gre_offload.c -rw-r--r-- 7.1 KB
icmp.c -rw-r--r-- 27.0 KB
igmp.c -rw-r--r-- 65.6 KB
inet_connection_sock.c -rw-r--r-- 25.9 KB
inet_diag.c -rw-r--r-- 28.2 KB
inet_fragment.c -rw-r--r-- 11.0 KB
inet_hashtables.c -rw-r--r-- 15.6 KB
inet_lro.c -rw-r--r-- 9.3 KB
inet_timewait_sock.c -rw-r--r-- 14.5 KB
inetpeer.c -rw-r--r-- 16.7 KB
ip_forward.c -rw-r--r-- 3.7 KB
ip_fragment.c -rw-r--r-- 20.3 KB
ip_gre.c -rw-r--r-- 22.2 KB
ip_input.c -rw-r--r-- 13.4 KB
ip_options.c -rw-r--r-- 15.3 KB
ip_output.c -rw-r--r-- 39.2 KB
ip_sockglue.c -rw-r--r-- 32.3 KB
ip_tunnel.c -rw-r--r-- 24.7 KB
ip_tunnel_core.c -rw-r--r-- 5.3 KB
ip_vti.c -rw-r--r-- 13.8 KB
ipcomp.c -rw-r--r-- 4.7 KB
ipconfig.c -rw-r--r-- 39.1 KB
ipip.c -rw-r--r-- 13.1 KB
ipmr.c -rw-r--r-- 63.8 KB
netfilter.c -rw-r--r-- 5.3 KB
ping.c -rw-r--r-- 29.0 KB
proc.c -rw-r--r-- 19.3 KB
protocol.c -rw-r--r-- 2.3 KB
raw.c -rw-r--r-- 25.1 KB
route.c -rw-r--r-- 66.5 KB
syncookies.c -rw-r--r-- 10.5 KB
sysctl_net_ipv4.c -rw-r--r-- 21.8 KB
tcp.c -rw-r--r-- 83.8 KB
tcp_bic.c -rw-r--r-- 6.2 KB
tcp_cong.c -rw-r--r-- 8.9 KB
tcp_cubic.c -rw-r--r-- 13.9 KB
tcp_diag.c -rw-r--r-- 1.8 KB
tcp_fastopen.c -rw-r--r-- 8.4 KB
tcp_highspeed.c -rw-r--r-- 4.9 KB
tcp_htcp.c -rw-r--r-- 7.4 KB
tcp_hybla.c -rw-r--r-- 4.9 KB
tcp_illinois.c -rw-r--r-- 8.1 KB
tcp_input.c -rw-r--r-- 170.2 KB
tcp_ipv4.c -rw-r--r-- 62.4 KB
tcp_lp.c -rw-r--r-- 8.7 KB
tcp_memcontrol.c -rw-r--r-- 5.5 KB
tcp_metrics.c -rw-r--r-- 30.4 KB
tcp_minisocks.c -rw-r--r-- 24.9 KB
tcp_offload.c -rw-r--r-- 7.8 KB
tcp_output.c -rw-r--r-- 95.9 KB
tcp_probe.c -rw-r--r-- 7.4 KB
tcp_scalable.c -rw-r--r-- 1.4 KB
tcp_timer.c -rw-r--r-- 18.4 KB
tcp_vegas.c -rw-r--r-- 9.6 KB
tcp_vegas.h -rw-r--r-- 867 bytes
tcp_veno.c -rw-r--r-- 5.6 KB
tcp_westwood.c -rw-r--r-- 8.0 KB
tcp_yeah.c -rw-r--r-- 6.9 KB
tunnel4.c -rw-r--r-- 4.1 KB
udp.c -rw-r--r-- 63.5 KB
udp_diag.c -rw-r--r-- 5.4 KB
udp_impl.h -rw-r--r-- 1.2 KB
udp_offload.c -rw-r--r-- 8.1 KB
udp_tunnel.c -rw-r--r-- 2.3 KB
udplite.c -rw-r--r-- 3.4 KB
xfrm4_input.c -rw-r--r-- 3.9 KB
xfrm4_mode_beet.c -rw-r--r-- 3.7 KB
xfrm4_mode_transport.c -rw-r--r-- 2.1 KB
xfrm4_mode_tunnel.c -rw-r--r-- 2.9 KB
xfrm4_output.c -rw-r--r-- 2.4 KB
xfrm4_policy.c -rw-r--r-- 7.4 KB
xfrm4_protocol.c -rw-r--r-- 6.7 KB
xfrm4_state.c -rw-r--r-- 2.4 KB
xfrm4_tunnel.c -rw-r--r-- 2.7 KB

back to top