Showing error 945

User: Jiri Slaby
Error type: Leaving function in locked state
Error type description: Some lock is not unlocked on all paths of a function, so it is leaked
File location: net/xfrm/xfrm_state.c
Line in file: 301
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2012-03-02 21:35:17 UTC


Source:

 271        type = typemap[proto];
 272        if (unlikely(type && !try_module_get(type->owner)))
 273                type = NULL;
 274        if (!type && !modload_attempted) {
 275                xfrm_state_put_afinfo(afinfo);
 276                request_module("xfrm-type-%d-%d", family, proto);
 277                modload_attempted = 1;
 278                goto retry;
 279        }
 280
 281        xfrm_state_put_afinfo(afinfo);
 282        return type;
 283}
 284
 285static void xfrm_put_type(const struct xfrm_type *type)
 286{
 287        module_put(type->owner);
 288}
 289
 290int xfrm_register_mode(struct xfrm_mode *mode, int family)
 291{
 292        struct xfrm_state_afinfo *afinfo;
 293        struct xfrm_mode **modemap;
 294        int err;
 295
 296        if (unlikely(mode->encap >= XFRM_MODE_MAX))
 297                return -EINVAL;
 298
 299        afinfo = xfrm_state_lock_afinfo(family);
 300        if (unlikely(afinfo == NULL))
 301                return -EAFNOSUPPORT;
 302
 303        err = -EEXIST;
 304        modemap = afinfo->mode_map;
 305        if (modemap[mode->encap])
 306                goto out;
 307
 308        err = -ENOENT;
 309        if (!try_module_get(afinfo->owner))
 310                goto out;
 311
Show full sources