if (call == NULL) ax25->source_addr = addr->fsa_ax25.sax25_call; else ax25->source_addr = *call; 
ax25->source_addr = call; 
static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len){	struct sock *sk = sock->sk;	struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr;	ax25_dev *ax25_dev = NULL;	ax25_address *call;	ax25_cb *ax25;	int err = 0;	if (addr_len != sizeof(struct sockaddr_ax25) &&	    addr_len != sizeof(struct full_sockaddr_ax25)) {		/* support for old structure may go away some time */		if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||		    (addr_len > sizeof(struct full_sockaddr_ax25))) {			return -EINVAL;	}		printk(KERN_WARNING "ax25_bind(): %s uses old (6 digipeater) socket structure.\n",			current->comm);	}	if (addr->fsa_ax25.sax25_family != AF_AX25)		return -EINVAL;	call = ax25_findbyuid(current->euid);	if (call == NULL && ax25_uid_policy && !capable(CAP_NET_ADMIN)) {		return -EACCES;	}	lock_sock(sk);	ax25 = ax25_sk(sk);	if (!sock_flag(sk, SOCK_ZAPPED)) {		err = -EINVAL;		goto out;	}	if (call == NULL)		ax25->source_addr = addr->fsa_ax25.sax25_call;	else		ax25->source_addr = *call;	/*	 * User already set interface with SO_BINDTODEVICE	 */	if (ax25->ax25_dev != NULL)		goto done;	if (addr_len > sizeof(struct sockaddr_ax25) && addr->fsa_ax25.sax25_ndigis == 1) {		if (ax25cmp(&addr->fsa_digipeater[0], &null_ax25_address) != 0 &&		    (ax25_dev = ax25_addr_ax25dev(&addr->fsa_digipeater[0])) == NULL) {			err = -EADDRNOTAVAIL;			goto out;		}	} else {		if ((ax25_dev = ax25_addr_ax25dev(&addr->fsa_ax25.sax25_call)) == NULL) {			err = -EADDRNOTAVAIL;			goto out;		}	}	if (ax25_dev != NULL)		ax25_fillin_cb(ax25, ax25_dev);done:	ax25_cb_add(ax25);	sock_reset_flag(sk, SOCK_ZAPPED);out:	release_sock(sk);	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/01d7dd0e9f8c5f1888619d2649c7da389232b408/af_ax25.c/buggy/net/ax25/af_ax25.c