All of lore.kernel.org
 help / color / mirror / Atom feed
From: Aruna Balakrishnaiah <aruna@linux.vnet.ibm.com>
To: Tony Luck <tony.luck@gmail.com>
Cc: "linuxppc-dev@ozlabs.org" <linuxppc-dev@ozlabs.org>,
	"paulus@samba.org" <paulus@samba.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"keescook@chromium.org" <keescook@chromium.org>
Subject: Re: [PATCH 00/11] Add compression support to pstore
Date: Wed, 07 Aug 2013 07:28:21 +0530	[thread overview]
Message-ID: <5201A9BD.4090503@linux.vnet.ibm.com> (raw)
In-Reply-To: <CA+8MBbKA+P4vs3utSKQ-LPMW3ybrWOp=f3FH6ahv1YtwnMm5KA@mail.gmail.com>

On Wednesday 07 August 2013 05:06 AM, Tony Luck wrote:
> On Mon, Aug 5, 2013 at 2:20 PM, Tony Luck <tony.luck@gmail.com> wrote:
>> Still have problems booting if there are any compressed images in ERST
>> to be inflated.
> So I took another look at this part of the code ... and saw a couple of issues:
>
>          while ((size = psi->read(&id, &type, &count, &time, &buf, &compressed,
>                                  psi)) > 0) {
>                  if (compressed && (type == PSTORE_TYPE_DMESG)) {
>                          big_buf_sz = (psinfo->bufsize * 100) / 45;
>                          big_buf = allocate_buf_for_decompression(big_buf_sz);
>
>                          if (big_buf || stream.workspace)
>>>> Did you mean "&&" here rather that "||"?

Yes right, it should be &&.

>                                  unzipped_len = pstore_decompress(buf, big_buf,
>                                                          size, big_buf_sz);
>>>> Need an "else" here to set unzipped_len to -1 (or set it to -1 down
>>>> at the bottom of the loop ready for next time around.
>                          if (unzipped_len > 0) {
>                                  buf = big_buf;
>>>> This sets us up for problems.  First, you just overwrote the address
>>>> of the buffer that psi->read allocated - so we have a memory leak. But
>>>> worse than that we now double free the same buffer below when we
>>>> kfree(buf) and then kfree(big_buf)
>                                  size = unzipped_len;
>                                  compressed = false;
>                          } else {
>                                  pr_err("pstore: decompression failed;"
>                                          "returned %d\n", unzipped_len);
>                                  compressed = true;
>                          }
>                  }
>                  rc = pstore_mkfile(type, psi->name, id, count, buf,
>                                    compressed, (size_t)size, time, psi);
>                  kfree(buf);
>                  kfree(stream.workspace);
>                  kfree(big_buf);
>                  buf = NULL;
>                  stream.workspace = NULL;
>                  big_buf = NULL;
>                  if (rc && (rc != -EEXIST || !quiet))
>                          failed++;
>          }
>
>
> See attached patch that fixes these - but the code still looks like it
> could be cleaned up a bit more.

The patch looks right. I will clean it up. Does the issue still persist after this?

> -Tony

WARNING: multiple messages have this Message-ID (diff)
From: Aruna Balakrishnaiah <aruna@linux.vnet.ibm.com>
To: Tony Luck <tony.luck@gmail.com>
Cc: "linuxppc-dev@ozlabs.org" <linuxppc-dev@ozlabs.org>,
	"paulus@samba.org" <paulus@samba.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"benh@kernel.crashing.org" <benh@kernel.crashing.org>,
	"keescook@chromium.org" <keescook@chromium.org>
Subject: Re: [PATCH 00/11] Add compression support to pstore
Date: Wed, 07 Aug 2013 07:28:21 +0530	[thread overview]
Message-ID: <5201A9BD.4090503@linux.vnet.ibm.com> (raw)
In-Reply-To: <CA+8MBbKA+P4vs3utSKQ-LPMW3ybrWOp=f3FH6ahv1YtwnMm5KA@mail.gmail.com>

On Wednesday 07 August 2013 05:06 AM, Tony Luck wrote:
> On Mon, Aug 5, 2013 at 2:20 PM, Tony Luck <tony.luck@gmail.com> wrote:
>> Still have problems booting if there are any compressed images in ERST
>> to be inflated.
> So I took another look at this part of the code ... and saw a couple of issues:
>
>          while ((size = psi->read(&id, &type, &count, &time, &buf, &compressed,
>                                  psi)) > 0) {
>                  if (compressed && (type == PSTORE_TYPE_DMESG)) {
>                          big_buf_sz = (psinfo->bufsize * 100) / 45;
>                          big_buf = allocate_buf_for_decompression(big_buf_sz);
>
>                          if (big_buf || stream.workspace)
>>>> Did you mean "&&" here rather that "||"?

Yes right, it should be &&.

>                                  unzipped_len = pstore_decompress(buf, big_buf,
>                                                          size, big_buf_sz);
>>>> Need an "else" here to set unzipped_len to -1 (or set it to -1 down
>>>> at the bottom of the loop ready for next time around.
>                          if (unzipped_len > 0) {
>                                  buf = big_buf;
>>>> This sets us up for problems.  First, you just overwrote the address
>>>> of the buffer that psi->read allocated - so we have a memory leak. But
>>>> worse than that we now double free the same buffer below when we
>>>> kfree(buf) and then kfree(big_buf)
>                                  size = unzipped_len;
>                                  compressed = false;
>                          } else {
>                                  pr_err("pstore: decompression failed;"
>                                          "returned %d\n", unzipped_len);
>                                  compressed = true;
>                          }
>                  }
>                  rc = pstore_mkfile(type, psi->name, id, count, buf,
>                                    compressed, (size_t)size, time, psi);
>                  kfree(buf);
>                  kfree(stream.workspace);
>                  kfree(big_buf);
>                  buf = NULL;
>                  stream.workspace = NULL;
>                  big_buf = NULL;
>                  if (rc && (rc != -EEXIST || !quiet))
>                          failed++;
>          }
>
>
> See attached patch that fixes these - but the code still looks like it
> could be cleaned up a bit more.

The patch looks right. I will clean it up. Does the issue still persist after this?

> -Tony


  reply	other threads:[~2013-08-07  1:58 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-15 16:55 [PATCH 00/11] Add compression support to pstore Aruna Balakrishnaiah
2013-07-15 16:55 ` Aruna Balakrishnaiah
2013-07-15 16:55 ` [PATCH 01/11] powerpc/pseries: Remove (de)compression in nvram with pstore enabled Aruna Balakrishnaiah
2013-07-15 16:55   ` Aruna Balakrishnaiah
2013-07-15 16:55 ` [PATCH 02/11] pstore: Add new argument 'compressed' in pstore write callback Aruna Balakrishnaiah
2013-07-15 16:55   ` Aruna Balakrishnaiah
2013-07-15 16:55 ` [PATCH 03/11] pstore/Kconfig: Select ZLIB_DEFLATE and ZLIB_INFLATE when PSTORE is selected Aruna Balakrishnaiah
2013-07-15 16:55   ` Aruna Balakrishnaiah
2013-07-15 16:55 ` [PATCH 04/11] pstore: Add compression support to pstore Aruna Balakrishnaiah
2013-07-15 16:55   ` Aruna Balakrishnaiah
2013-07-15 16:55 ` [PATCH 05/11] pstore: Introduce new argument 'compressed' in the read callback Aruna Balakrishnaiah
2013-07-15 16:55   ` Aruna Balakrishnaiah
2013-07-15 16:56 ` [PATCH 06/11] pstore: Provide decompression support to pstore Aruna Balakrishnaiah
2013-07-15 16:56   ` Aruna Balakrishnaiah
2013-07-15 16:56 ` [PATCH 07/11] pstore: Add file extension to pstore file if compressed Aruna Balakrishnaiah
2013-07-15 16:56   ` Aruna Balakrishnaiah
2013-07-15 16:56 ` [PATCH 08/11] powerpc/pseries: Read and write to the 'compressed' flag of pstore Aruna Balakrishnaiah
2013-07-15 16:56   ` Aruna Balakrishnaiah
2013-07-15 16:56 ` [PATCH 09/11] erst: " Aruna Balakrishnaiah
2013-07-15 16:56   ` Aruna Balakrishnaiah
2013-07-15 16:56 ` [PATCH 10/11] efi-pstore: " Aruna Balakrishnaiah
2013-07-15 16:56   ` Aruna Balakrishnaiah
2013-07-15 16:57 ` [PATCH 11/11] pstore/ram: " Aruna Balakrishnaiah
2013-07-15 16:57   ` Aruna Balakrishnaiah
2013-08-01 10:40 ` [PATCH 00/11] Add compression support to pstore Aruna Balakrishnaiah
2013-08-01 10:40   ` Aruna Balakrishnaiah
2013-08-01 23:42   ` Luck, Tony
2013-08-01 23:42     ` Luck, Tony
2013-08-02 21:39     ` Tony Luck
2013-08-02 21:39       ` Tony Luck
2013-08-02 22:12       ` Tony Luck
2013-08-05 16:41         ` Tony Luck
2013-08-05 17:10         ` Aruna Balakrishnaiah
2013-08-05 17:10           ` Aruna Balakrishnaiah
2013-08-05 18:22           ` Tony Luck
2013-08-05 18:22             ` Tony Luck
2013-08-05 19:41             ` Aruna Balakrishnaiah
2013-08-05 19:41               ` Aruna Balakrishnaiah
2013-08-05 21:20               ` Tony Luck
2013-08-05 21:20                 ` Tony Luck
2013-08-06 23:36                 ` Tony Luck
2013-08-06 23:36                   ` Tony Luck
2013-08-07  1:58                   ` Aruna Balakrishnaiah [this message]
2013-08-07  1:58                     ` Aruna Balakrishnaiah
2013-08-07  3:25                     ` Tony Luck
2013-08-07  3:25                       ` Tony Luck
2013-08-07  5:13                       ` Aruna Balakrishnaiah
2013-08-07  5:13                         ` Aruna Balakrishnaiah
2013-08-07  5:35                         ` Tony Luck
2013-08-07  5:35                           ` Tony Luck
2013-08-07 17:30                           ` Tony Luck
2013-08-07 17:30                             ` Tony Luck
2013-08-08  4:29                             ` Aruna Balakrishnaiah
2013-08-08  5:05                               ` Tony Luck
2013-08-07 22:22                           ` Tony Luck
2013-08-07 22:22                             ` Tony Luck
2013-08-08  4:08                             ` Aruna Balakrishnaiah
2013-08-08  4:08                               ` Aruna Balakrishnaiah
2013-08-09 10:13                               ` Aruna Balakrishnaiah

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=5201A9BD.4090503@linux.vnet.ibm.com \
    --to=aruna@linux.vnet.ibm.com \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=paulus@samba.org \
    --cc=tony.luck@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.