Commit 06137619 authored by Martin Schiller's avatar Martin Schiller Committed by David S. Miller
Browse files

net/x25: fix null_x25_address handling



o x25_find_listener(): the compare for the null_x25_address was wrong.
   We have to check the x25_addr of the listener socket instead of the
   x25_addr of the incomming call.

 o x25_bind(): it was not possible to bind a socket to null_x25_address

Signed-off-by: default avatarMartin Schiller <ms@dev.tdt.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d449ba3d
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -288,7 +288,7 @@ static struct sock *x25_find_listener(struct x25_address *addr,
	sk_for_each(s, &x25_list)
		if ((!strcmp(addr->x25_addr,
			x25_sk(s)->source_addr.x25_addr) ||
				!strcmp(addr->x25_addr,
				!strcmp(x25_sk(s)->source_addr.x25_addr,
					null_x25_address.x25_addr)) &&
					s->sk_state == TCP_LISTEN) {
			/*
@@ -688,6 +688,9 @@ static int x25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
		goto out;
	}

	/* check for the null_x25_address */
	if (strcmp(addr->sx25_addr.x25_addr, null_x25_address.x25_addr)) {

		len = strlen(addr->sx25_addr.x25_addr);
		for (i = 0; i < len; i++) {
			if (!isdigit(addr->sx25_addr.x25_addr[i])) {
@@ -695,6 +698,7 @@ static int x25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
				goto out;
			}
		}
	}

	lock_sock(sk);
	x25_sk(sk)->source_addr = addr->sx25_addr;