Showing error 1779

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


Source:

1390
1391static struct dst_entry *xfrm_bundle_create(struct xfrm_policy *policy,
1392                                            struct xfrm_state **xfrm, int nx,
1393                                            struct flowi *fl,
1394                                            struct dst_entry *dst)
1395{
1396        unsigned long now = jiffies;
1397        struct net_device *dev;
1398        struct dst_entry *dst_prev = NULL;
1399        struct dst_entry *dst0 = NULL;
1400        int i = 0;
1401        int err;
1402        int header_len = 0;
1403        int nfheader_len = 0;
1404        int trailer_len = 0;
1405        int tos;
1406        int family = policy->selector.family;
1407        xfrm_address_t saddr, daddr;
1408
1409        xfrm_flowi_addr_get(fl, &saddr, &daddr, family);
1410
1411        tos = xfrm_get_tos(fl, family);
1412        err = tos;
1413        if (tos < 0)
1414                goto put_states;
1415
1416        dst_hold(dst);
1417
1418        for (; i < nx; i++) {
1419                struct xfrm_dst *xdst = xfrm_alloc_dst(family);
1420                struct dst_entry *dst1 = &xdst->u.dst;
1421
1422                err = PTR_ERR(xdst);
1423                if (IS_ERR(xdst)) {
1424                        dst_release(dst);
1425                        goto put_states;
1426                }
1427
1428                if (!dst_prev)
1429                        dst0 = dst1;
1430                else {
Show full sources