Showing error 1827

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


Source:

265                         u16 op, unsigned long timeout)
266{
267        struct mlx4_cmd *cmd = &mlx4_priv(dev)->cmd;
268        struct mlx4_cmd_context *context;
269        int err = 0;
270
271        down(&cmd->event_sem);
272
273        spin_lock(&cmd->context_lock);
274        BUG_ON(cmd->free_head < 0);
275        context = &cmd->context[cmd->free_head];
276        context->token += cmd->token_mask + 1;
277        cmd->free_head = context->next;
278        spin_unlock(&cmd->context_lock);
279
280        init_completion(&context->done);
281
282        mlx4_cmd_post(dev, in_param, out_param ? *out_param : 0,
283                      in_modifier, op_modifier, op, context->token, 1);
284
285        if (!wait_for_completion_timeout(&context->done, msecs_to_jiffies(timeout))) {
286                err = -EBUSY;
287                goto out;
288        }
289
290        err = context->result;
291        if (err)
292                goto out;
293
294        if (out_is_imm)
295                *out_param = context->out_param;
296
297out:
298        spin_lock(&cmd->context_lock);
299        context->next = cmd->free_head;
300        cmd->free_head = context - cmd->context;
301        spin_unlock(&cmd->context_lock);
302
303        up(&cmd->event_sem);
304        return err;
305}
Show full sources