diff --git a/Makefile b/Makefile
index 4feab0e..be843fc 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 10
-SUBLEVEL = 2
+SUBLEVEL = 3
 EXTRAVERSION =
 NAME = Unnamed
 
diff --git a/libbb/udp_io.c b/libbb/udp_io.c
index e968ecb..bde4d77 100644
--- a/libbb/udp_io.c
+++ b/libbb/udp_io.c
@@ -36,11 +36,12 @@
 #else
 	struct iovec iov[1];
 	struct msghdr msg;
-	char cbuf[sizeof(struct in_pktinfo)
+	union {
+		char cmsg[CMSG_SPACE(sizeof(struct in_pktinfo))];
 #if ENABLE_FEATURE_IPV6 && defined(IPV6_PKTINFO)
-		| sizeof(struct in6_pktinfo) /* (a|b) is poor man's max(a,b) */
+		char cmsg6[CMSG_SPACE(sizeof(struct in6_pktinfo))];
 #endif
-	];
+	} u;
 	struct cmsghdr* cmsgptr;
 
 	if (from->sa_family != AF_INET
@@ -57,15 +58,15 @@
 	iov[0].iov_base = buf;
 	iov[0].iov_len = len;
 
-	memset(cbuf, 0, sizeof(cbuf));
+	memset(&u, 0, sizeof(u));
 
 	memset(&msg, 0, sizeof(msg));
 	msg.msg_name = (void *)(struct sockaddr *)to; /* or compiler will annoy us */
 	msg.msg_namelen = tolen;
 	msg.msg_iov = iov;
 	msg.msg_iovlen = 1;
-	msg.msg_control = cbuf;
-	msg.msg_controllen = sizeof(cbuf);
+	msg.msg_control = &u;
+	msg.msg_controllen = sizeof(u);
 	msg.msg_flags = flags;
 
 	cmsgptr = CMSG_FIRSTHDR(&msg);
@@ -89,6 +90,8 @@
 		pktptr->ipi6_addr = ((struct sockaddr_in6*)from)->sin6_addr;
 	}
 #endif
+	msg.msg_controllen = cmsgptr->cmsg_len;
+
 	return sendmsg(fd, &msg, flags);
 #endif
 }
@@ -109,7 +112,9 @@
 	struct iovec iov[1];
 	union {
 		char cmsg[CMSG_SPACE(sizeof(struct in_pktinfo))];
+#if ENABLE_FEATURE_IPV6 && defined(IPV6_PKTINFO)
 		char cmsg6[CMSG_SPACE(sizeof(struct in6_pktinfo))];
+#endif
 	} u;
 	struct cmsghdr *cmsgptr;
 	struct msghdr msg;
diff --git a/networking/dnsd.c b/networking/dnsd.c
index cb62d20..97ba2dc 100644
--- a/networking/dnsd.c
+++ b/networking/dnsd.c
@@ -194,7 +194,8 @@
 			for (i = 1; i <= (int)(d->name[0]); i++)
 				if (tolower(qs[i]) != d->name[i])
 					break;
-			if (i > (int)(d->name[0])) {
+			if (i > (int)(d->name[0]) ||
+			    (d->name[0] == 1 && d->name[1] == '*')) {
 				strcpy((char *)as, d->ip);
 #if DEBUG
 				fprintf(stderr, " OK as:%s\n", as);
@@ -202,7 +203,8 @@
 				return 0;
 			}
 		} else if (type == REQ_PTR) { /* search by IP-address */
-			if (!strncmp((char*)&d->rip[1], (char*)&qs[1], strlen(d->rip)-1)) {
+			if ((d->name[0] != 1 || d->name[1] != '*') &&
+			    !strncmp((char*)&d->rip[1], (char*)&qs[1], strlen(d->rip)-1)) {
 				strcpy((char *)as, d->name);
 				return 0;
 			}
@@ -401,7 +403,7 @@
 		r = process_packet(buf);
 		if (r <= 0)
 			continue;
-		send_to_from(udps, buf, r, 0, &to->u.sa, &from->u.sa, lsa->len);
+		send_to_from(udps, buf, r, 0, &from->u.sa, &to->u.sa, lsa->len);
 	}
 	return 0;
 }
diff --git a/networking/interface.c b/networking/interface.c
index 44bd8d3..cdd31da 100644
--- a/networking/interface.c
+++ b/networking/interface.c
@@ -223,7 +223,7 @@
 	char *pos;
 	unsigned int i;
 
-	if (!buff);
+	if (!buff)
 		buff = xmalloc(sizeof(struct sockaddr) * 3 + 1);
 	pos = buff;
 	for (i = 0; i < sizeof(struct sockaddr); i++) {
diff --git a/networking/isrv_identd.c b/networking/isrv_identd.c
index d60c9fb..a96ac60 100644
--- a/networking/isrv_identd.c
+++ b/networking/isrv_identd.c
@@ -113,7 +113,7 @@
 		strncpy(bogouser, argv[optind], sizeof(bogouser));
 
 	/* Daemonize if no -f and no -i and no -w */
-	if (!(opt & OPT_fiw));
+	if (!(opt & OPT_fiw))
 		bb_daemonize_or_rexec(0, argv);
 
 	/* Where to log in inetd modes? "Classic" inetd
diff --git a/networking/libiproute/ip_parse_common_args.c b/networking/libiproute/ip_parse_common_args.c
index 294bde5..5e4012b 100644
--- a/networking/libiproute/ip_parse_common_args.c
+++ b/networking/libiproute/ip_parse_common_args.c
@@ -54,7 +54,7 @@
 				break;
 			}
 		}
-		arg = index_in_strings(ip_common_commands, opt);
+		arg = index_in_substrings(ip_common_commands, opt);
 		if (arg < 0)
 			bb_show_usage();
 		if (arg == ARG_oneline) {
diff --git a/procps/fuser.c b/procps/fuser.c
index fd876d5..55f7917 100644
--- a/procps/fuser.c
+++ b/procps/fuser.c
@@ -208,6 +208,7 @@
 	return plist;
 }
 
+/* NB: does chdir internally */
 static pid_list *scan_proc_pids(inode_list *ilist)
 {
 	DIR *d;
@@ -215,7 +216,8 @@
 	pid_t pid;
 	pid_list *plist;
 
-	d = opendir(".");
+	xchdir("/proc");
+	d = opendir("/proc");
 	if (!d)
 		return NULL;
 
@@ -329,7 +331,7 @@
 		pp++;
 	}
 
-	plist = scan_proc_pids(ilist);
+	plist = scan_proc_pids(ilist); /* changes dir to "/proc" */
 
 	if (!plist)
 		return EXIT_FAILURE;
diff --git a/shell/hush.c b/shell/hush.c
index 4e6d500..dcaeed0 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -699,9 +699,18 @@
 	BLTIN(NULL, NULL, NULL)
 };
 
+/* Signals are grouped, we handle them in batches */
+static void set_misc_sighandler(void (*handler)(int))
+{
+	bb_signals(0
+		+ (1 << SIGINT)
+		+ (1 << SIGQUIT)
+		+ (1 << SIGTERM)
+		, handler);
+}
+
 #if ENABLE_HUSH_JOB
 
-/* Signals are grouped, we handle them in batches */
 static void set_fatal_sighandler(void (*handler)(int))
 {
 	bb_signals(0
@@ -725,14 +734,6 @@
 		+ (1 << SIGTTOU)
 		, handler);
 }
-static void set_misc_sighandler(void (*handler)(int))
-{
-	bb_signals(0
-		+ (1 << SIGINT)
-		+ (1 << SIGQUIT)
-		+ (1 << SIGTERM)
-		, handler);
-}
 /* SIGCHLD is special and handled separately */
 
 static void set_every_sighandler(void (*handler)(int))
@@ -815,7 +816,6 @@
 
 #define set_fatal_sighandler(handler)   ((void)0)
 #define set_jobctrl_sighandler(handler) ((void)0)
-#define set_misc_sighandler(handler)    ((void)0)
 #define hush_exit(e)                    exit(e)
 
 #endif /* JOB */
@@ -3907,8 +3907,10 @@
 				/* give up */
 				interactive_fd = 0;
 		}
-		if (interactive_fd)
+		if (interactive_fd) {
 			fcntl(interactive_fd, F_SETFD, FD_CLOEXEC);
+			set_misc_sighandler(SIG_IGN);
+		}
 	}
 #endif
 
diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c
index 371b558..5f3ac2c 100644
--- a/sysklogd/syslogd.c
+++ b/sysklogd/syslogd.c
@@ -347,10 +347,11 @@
 				sprintf(newFile, "%s.%d", G.logFilePath, i);
 				if (i == 0) break;
 				sprintf(oldFile, "%s.%d", G.logFilePath, --i);
-				xrename(oldFile, newFile);
+				/* ignore errors - file might be missing */
+				rename(oldFile, newFile);
 			}
 			/* newFile == "f.0" now */
-			xrename(G.logFilePath, newFile);
+			rename(G.logFilePath, newFile);
 			fl.l_type = F_UNLCK;
 			fcntl(G.logFD, F_SETLKW, &fl);
 			close(G.logFD);
diff --git a/util-linux/mdev.c b/util-linux/mdev.c
index f0a8854..2341a5a 100644
--- a/util-linux/mdev.c
+++ b/util-linux/mdev.c
@@ -72,8 +72,14 @@
 	/* Determine device name, type, major and minor */
 	device_name = bb_basename(path);
 	/* http://kernel.org/doc/pending/hotplug.txt says that only
-	 * "/sys/block/..." is for block devices. "sys/bus" etc is not! */
-	type = (strncmp(&path[5], "block/", 6) == 0 ? S_IFBLK : S_IFCHR);
+	 * "/sys/block/..." is for block devices. "/sys/bus" etc is not!
+	 * Since kernel 2.6.25 block devices are also in /sys/class/block. */
+	/* TODO: would it be acceptable to just use strstr(path, "/block/")? */
+	if (strncmp(&path[5], "class/block/"+6, 6) != 0
+	 && strncmp(&path[5], "class/block/", 12) != 0)
+	        type = S_IFCHR;
+	else
+	        type = S_IFBLK;
 
 	if (ENABLE_FEATURE_MDEV_CONF) {
 		FILE *fp;
@@ -172,8 +178,9 @@
 					/* substitute %1..9 with off[1..9], if any */
 					n = 0;
 					s = val;
-					while (*s && *s++ == '%')
-						n++;
+					while (*s)
+						if (*s++ == '%')
+							n++;
 
 					p = alias = xzalloc(strlen(val) + n * strlen(device_name));
 					s = val + 1;
