public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Willy Tarreau <w@1wt.eu>
To: A <amit234234234234@gmail.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: Setting variable NULL after freeing it.
Date: Sat, 12 Nov 2022 08:47:59 +0100	[thread overview]
Message-ID: <20221112074759.GA5111@1wt.eu> (raw)
In-Reply-To: <CAOM0=dbwNs1XcnD0i+SrC1S-SNFEGXM5G8QrVCqAxaz=YkAEFg@mail.gmail.com>

On Sat, Nov 12, 2022 at 11:47:39AM +0530, A wrote:
> Hi,
> 
> I am writing a linux kernel driver for a new device.
> 
> Is it a good practice to set variable NULL after freeing it?
> 
> Something like this -
> 
> kfree(x);
> x = NULL;
> 
> Please let me know.

It depends. What's important is not to let a pointer exist to a freed
location, so if you're doing:

    kfree(card->pool);

then it's usually important to follow this by:

    card->pool = NULL;

so that no code stumbles upon that rotten pointer. Similarly if you're
freeing a variable in the middle of a function or inside an "if" block,
it's wise to reset the pointer so that it doesn't continue to exist
further in the function, and is visually easier to track for anyone
reviewing that code.

But a lot of kfree() calls exist in return paths and are only followed by
other kfree() and a return statement. In this case, it can be completely
useless to NULL a local variable that was just freed as the variable
stops existing when returning. For example, below nullifying the pointers
wouldn't bring anything:

   kfree(card->pool);
   kfree(card);
   return -EBUSY;

A good way to check common practices is to check with git grep how
current code already deals with this:

   $ git grep -wA3 kfree

You'll notice that all practices indeed exist.

Willy

PS: you could more easily get responses in the future by associating a
    real name with your address instead of just "A" which makes it look
    like a spam.


  reply	other threads:[~2022-11-12  7:48 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-12  6:17 Setting variable NULL after freeing it A
2022-11-12  7:47 ` Willy Tarreau [this message]
2022-11-12 10:48   ` A
2022-11-12 11:34     ` Willy Tarreau
2022-11-12 11:58       ` A
2022-11-12 12:01         ` Willy Tarreau
2022-11-12 12:15           ` A

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221112074759.GA5111@1wt.eu \
    --to=w@1wt.eu \
    --cc=amit234234234234@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox