Showing error 1778

User: Jiri Slaby
Error type: Invalid Pointer Dereference
Error type description: A pointer which is invalid is being dereferenced
File location: net/sunrpc/svcsock.c
Line in file: 769
Project: Linux Kernel
Project version: 2.6.28
Tools: Smatch (1.59)
Entered: 2013-09-10 20:24:52 UTC


Source:

 739
 740        err = kernel_getpeername(newsock, sin, &slen);
 741        if (err < 0) {
 742                if (net_ratelimit())
 743                        printk(KERN_WARNING "%s: peername failed (err %d)!\n",
 744                                   serv->sv_name, -err);
 745                goto failed;                /* aborted connection or whatever */
 746        }
 747
 748        /* Ideally, we would want to reject connections from unauthorized
 749         * hosts here, but when we get encryption, the IP of the host won't
 750         * tell us anything.  For now just warn about unpriv connections.
 751         */
 752        if (!svc_port_is_privileged(sin)) {
 753                dprintk(KERN_WARNING
 754                        "%s: connect from unprivileged port: %s\n",
 755                        serv->sv_name,
 756                        __svc_print_addr(sin, buf, sizeof(buf)));
 757        }
 758        dprintk("%s: connect from %s\n", serv->sv_name,
 759                __svc_print_addr(sin, buf, sizeof(buf)));
 760
 761        /* make sure that a write doesn't block forever when
 762         * low on memory
 763         */
 764        newsock->sk->sk_sndtimeo = HZ*30;
 765
 766        if (!(newsvsk = svc_setup_socket(serv, newsock, &err,
 767                                 (SVC_SOCK_ANONYMOUS | SVC_SOCK_TEMPORARY))))
 768                goto failed;
 769        svc_xprt_set_remote(&newsvsk->sk_xprt, sin, slen);
 770        err = kernel_getsockname(newsock, sin, &slen);
 771        if (unlikely(err < 0)) {
 772                dprintk("svc_tcp_accept: kernel_getsockname error %d\n", -err);
 773                slen = offsetof(struct sockaddr, sa_data);
 774        }
 775        svc_xprt_set_local(&newsvsk->sk_xprt, sin, slen);
 776
 777        if (serv->sv_stats)
 778                serv->sv_stats->nettcpconn++;
 779
Show full sources