Showing error 1828

User: Jiri Slaby
Error type: Invalid Pointer Dereference
Error type description: A pointer which is invalid is being dereferenced
File location: drivers/net/tulip/uli526x.c
Line in file: 856
Project: Linux Kernel
Project version: 2.6.28
Tools: Smatch (1.59)
Entered: 2013-09-11 08:47:26 UTC


Source:

 826                        if (rdes0 & 0x8000) {
 827                                /* This is a error packet */
 828                                //printk(DRV_NAME ": rdes0: %lx\n", rdes0);
 829                                db->stats.rx_errors++;
 830                                if (rdes0 & 1)
 831                                        db->stats.rx_fifo_errors++;
 832                                if (rdes0 & 2)
 833                                        db->stats.rx_crc_errors++;
 834                                if (rdes0 & 0x80)
 835                                        db->stats.rx_length_errors++;
 836                        }
 837
 838                        if ( !(rdes0 & 0x8000) ||
 839                                ((db->cr6_data & CR6_PM) && (rxlen>6)) ) {
 840                                skb = rxptr->rx_skb_ptr;
 841
 842                                /* Good packet, send to upper layer */
 843                                /* Shorst packet used new SKB */
 844                                if ( (rxlen < RX_COPY_SIZE) &&
 845                                        ( (skb = dev_alloc_skb(rxlen + 2) )
 846                                        != NULL) ) {
 847                                        /* size less than COPY_SIZE, allocate a rxlen SKB */
 848                                        skb_reserve(skb, 2); /* 16byte align */
 849                                        memcpy(skb_put(skb, rxlen),
 850                                               skb_tail_pointer(rxptr->rx_skb_ptr),
 851                                               rxlen);
 852                                        uli526x_reuse_skb(db, rxptr->rx_skb_ptr);
 853                                } else
 854                                        skb_put(skb, rxlen);
 855
 856                                skb->protocol = eth_type_trans(skb, dev);
 857                                netif_rx(skb);
 858                                dev->last_rx = jiffies;
 859                                db->stats.rx_packets++;
 860                                db->stats.rx_bytes += rxlen;
 861
 862                        } else {
 863                                /* Reuse SKB buffer when the packet is error */
 864                                ULI526X_DBUG(0, "Reuse SK buffer, rdes0", rdes0);
 865                                uli526x_reuse_skb(db, rxptr->rx_skb_ptr);
 866                        }
Show full sources