Messages in this thread Patch in this message |  | | | Subject | [PATCH - 2.6.14.5]x25: fix for broken x25 module | | From | Shaun Pereira <> | | Date | Tue, 03 Jan 2006 16:48:27 +1100 |
| |
Hi Have included a patch fix for the x25 module in the latest stable version of the kernel.
Problem: When a user-space server application calls bind on a socket, then in kernel space this bound socket is considered 'x25-linked' and the SOCK_ZAPPED flag is unset.(As in x25_bind()/af_x25.c).
Now when a user-space client application attempts to connect to the server on the listening socket, if the kernel accepts this in-coming call, then it returns a new socket to userland and attempts to reply to the caller.
The reply/x25_sendmsg() will fail, because the new socket created on call-accept has its SOCK_ZAPPED flag set by x25_make_new(). (sock_init_data() called by x25_alloc_socket() called by x25_make_new() sets the flag to SOCK_ZAPPED)). Fix: Using the sock_copy_flag() routine available in sock.h fixes this.
Tested on 32 and 64 bit kernels with x25 over tcp.
I hope this fix can be applied to the next release of the kernel. Many Thanks Shaun
Signed-off-by:Shaun Pereira <pereira.shaun@gmail.com>
diff -uprN -X dontdiff linux-2.6.14.5-vanilla/net/x25/af_x25.c linux-2.6.14.5/net/x25/af_x25.c --- linux-2.6.14.5-vanilla/net/x25/af_x25.c 2005-12-27 11:26:33.000000000 +1100 +++ linux-2.6.14.5/net/x25/af_x25.c 2006-01-03 10:25:39.000000000 +1100 @@ -540,12 +540,7 @@ static struct sock *x25_make_new(struct sk->sk_state = TCP_ESTABLISHED; sk->sk_sleep = osk->sk_sleep; sk->sk_backlog_rcv = osk->sk_backlog_rcv; - - if (sock_flag(osk, SOCK_ZAPPED)) - sock_set_flag(sk, SOCK_ZAPPED); - - if (sock_flag(osk, SOCK_DBG)) - sock_set_flag(sk, SOCK_DBG); + sock_copy_flags(sk, osk);
ox25 = x25_sk(osk); x25->t21 = ox25->t21;
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |