From: Hannes Reinecke <hare@suse.de>
To: Don Brace <don.brace@pmcs.com>,
scott.teel@pmcs.com, Kevin.Barnett@pmcs.com,
scott.benesh@pmcs.com, james.bottomley@parallels.com,
hch@infradead.org, Justin.Lindley@pmcs.com, elliott@hpe.com
Cc: linux-scsi@vger.kernel.org
Subject: Re: [PATCH 1 23/25] hpsa: fix multiple issues in path_info_show
Date: Fri, 30 Oct 2015 09:18:20 +0100 [thread overview]
Message-ID: <563327CC.5040400@suse.de> (raw)
In-Reply-To: <20151028220650.5323.11242.stgit@brunhilda>
On 10/28/2015 11:06 PM, Don Brace wrote:
> From: Rasmus Villemoes <linux@rasmusvillemoes.dk>
>
> path_info_show() seems to be broken in multiple ways.
>
> First, there's
>
> 817 return snprintf(buf, output_len+1, "%s%s%s%s%s%s%s%s",
> 818 path[0], path[1], path[2], path[3],
> 819 path[4], path[5], path[6], path[7]);
>
> so hopefully output_len contains the combined length of the eight
> strings. Otherwise, snprintf will stop copying to the output
> buffer, but still end up reporting that combined length - which
> in turn would result in user-space getting a bunch of useless nul
> bytes (thankfully the upper sysfs layer seems to clear the output
> buffer before passing it to the various ->show routines). But we have
>
> 767 output_len = snprintf(path[i],
> 768 PATH_STRING_LEN, "[%d:%d:%d:%d] %20.20s ",
> 769 h->scsi_host->host_no,
> 770 hdev->bus, hdev->target, hdev->lun,
> 771 scsi_device_type(hdev->devtype));
>
> so output_len at best contains the length of the last string printed.
>
> Inside the loop, we then otherwise add to output_len. By magic,
> we still have PATH_STRING_LEN available every time... This
> wouldn't really be a problem if the bean-counting has been done
> properly and each line actually does fit in 50 bytes, and maybe
> it does, but I don't immediately see why. Suppose we end up
> taking this branch:
>
> 802 output_len += snprintf(path[i] + output_len,
> 803 PATH_STRING_LEN,
> 804 "BOX: %hhu BAY: %hhu %s\n",
> 805 box, bay, active);
>
> An optimistic estimate says this uses strlen("BOX: 1 BAY: 2
> Active\n") which is 21. Now add the 20 bytes guaranteed by the
> %20.20s and then some for the rest of that format string, and
> we're easily over 50 bytes. I don't think we can get over 100
> bytes even being pessimistic, so this just means we'll scribble
> into the next path[i+1] and maybe get that overwritten later,
> leading to some garbled output (in fact, since we'd overwrite the
> previous string's 0-terminator, we could end up with one very
> long string and then print various suffixes of that, leading to
> much more than 400 bytes of output). Except of course when we're
> filling path[7], where overrunning it means writing random stuff
> to the kernel stack, which is usually a lot of fun.
>
> We can fix all of that and get rid of the 400 byte stack buffer by
> simply writing directly to the given output buffer, which the upper
> layer guarantees is at least PAGE_SIZE. s[c]nprintf doesn't care where
> it is writing to, so this doesn't make the spin lock hold time any
> longer. Using scnprintf ensures that output_len always represents the
> number of bytes actually written to the buffer, so we'll report the
> proper amount to the upper layer.
>
> Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
> Signed-off-by: Don Brace <don.brace@pmcs.com>
> ---
> drivers/scsi/hpsa.c | 38 +++++++++++++++++---------------------
> 1 file changed, 17 insertions(+), 21 deletions(-)
>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Cheers,
Hannes
--
Dr. Hannes Reinecke zSeries & Storage
hare@suse.de +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg)
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2015-10-30 8:18 UTC|newest]
Thread overview: 107+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-28 22:04 [PATCH 1 00/25] hpsa updates Don Brace
2015-10-28 22:04 ` [PATCH 1 01/25] hpsa: stop zeroing reset_cmds_out and ioaccel_cmds_out during rescan Don Brace
2015-10-29 13:25 ` Tomas Henzl
2015-10-30 7:45 ` Hannes Reinecke
2015-10-28 22:04 ` [PATCH 1 02/25] hpsa: remove unused hpsa_tag_discard_error_bits Don Brace
2015-10-29 13:26 ` Tomas Henzl
2015-10-29 14:37 ` Manoj Kumar
2015-10-29 14:49 ` Don Brace
2015-10-30 7:46 ` Hannes Reinecke
2015-10-28 22:04 ` [PATCH 1 03/25] hpsa: check for null arguments to dev_printk Don Brace
2015-10-29 13:41 ` Tomas Henzl
2015-10-29 14:41 ` Manoj Kumar
2015-10-30 7:47 ` Hannes Reinecke
2015-10-30 14:16 ` Don Brace
2015-10-28 22:04 ` [PATCH 1 04/25] hpsa: fix null device issues Don Brace
2015-10-29 14:06 ` Tomas Henzl
2015-10-30 7:49 ` Hannes Reinecke
2015-10-28 22:05 ` [PATCH 1 05/25] hpsa: allow driver requested rescans Don Brace
2015-10-30 7:51 ` Hannes Reinecke
2015-10-28 22:05 ` [PATCH 1 06/25] hpsa: abandon rescans on memory alloaction failures Don Brace
2015-10-30 7:53 ` Hannes Reinecke
2015-10-30 20:44 ` Don Brace
2015-10-28 22:05 ` [PATCH 1 07/25] hpsa: correct transfer length for 6 byte read/write commands Don Brace
2015-10-30 7:54 ` Hannes Reinecke
2015-10-28 22:05 ` [PATCH 1 08/25] hpsa: fix hpsa_adjust_hpsa_scsi_table Don Brace
2015-10-29 14:23 ` Tomas Henzl
2015-10-30 7:57 ` Hannes Reinecke
2015-10-30 20:46 ` Don Brace
2015-10-28 22:05 ` [PATCH 1 09/25] hpsa: fix physical target reset Don Brace
2015-10-29 14:30 ` Tomas Henzl
2015-10-29 15:29 ` Don Brace
2015-10-29 15:52 ` Tomas Henzl
2015-10-30 7:59 ` Hannes Reinecke
2015-10-28 22:05 ` [PATCH 1 10/25] hpsa: correct check for non-disk devices Don Brace
2015-10-29 14:37 ` Tomas Henzl
2015-10-30 8:01 ` Hannes Reinecke
2015-10-28 22:05 ` [PATCH 1 11/25] hpsa: correct ioaccel2 sg chain len Don Brace
2015-10-29 15:01 ` Tomas Henzl
2015-10-30 8:01 ` Hannes Reinecke
2015-10-28 22:05 ` [PATCH 1 12/25] hpsa: simplify check for device exposure Don Brace
2015-10-29 15:03 ` Tomas Henzl
2015-10-30 8:04 ` Hannes Reinecke
2015-10-28 22:05 ` [PATCH 1 13/25] hpsa: simplify update scsi devices Don Brace
2015-10-29 15:53 ` Tomas Henzl
2015-10-29 16:43 ` Matthew R. Ochs
2015-10-29 19:01 ` Don Brace
2015-10-29 20:28 ` Matthew R. Ochs
2015-10-30 8:05 ` Hannes Reinecke
2015-10-28 22:05 ` [PATCH 1 14/25] hpsa: add function is_logical_device Don Brace
2015-10-29 15:53 ` Tomas Henzl
2015-10-29 16:46 ` Matthew R. Ochs
2015-10-30 8:05 ` Hannes Reinecke
2015-10-28 22:06 ` [PATCH 1 15/25] hpsa: enhance hpsa_get_device_id Don Brace
2015-10-29 16:04 ` Tomas Henzl
2015-10-29 17:04 ` Matthew R. Ochs
2015-10-30 8:08 ` Hannes Reinecke
2015-10-30 20:59 ` Don Brace
2015-10-28 22:06 ` [PATCH 1 16/25] hpsa: refactor hpsa_figure_bus_target_lun Don Brace
2015-10-29 16:27 ` Tomas Henzl
2015-10-30 8:09 ` Hannes Reinecke
2015-10-28 22:06 ` [PATCH 1 17/25] hpsa: move scsi_add_device and scsi_remove_device calls to new function Don Brace
2015-10-29 16:37 ` Tomas Henzl
2015-10-29 17:21 ` Matthew R. Ochs
2015-10-29 20:30 ` Don Brace
2015-10-30 15:56 ` Matthew R. Ochs
2015-10-30 8:09 ` Hannes Reinecke
2015-10-28 22:06 ` [PATCH 1 18/25] External array LUNs must use target and lun numbers assigned by the Don Brace
2015-10-29 19:41 ` Matthew R. Ochs
2015-10-30 8:11 ` Hannes Reinecke
2015-10-30 14:11 ` Tomas Henzl
2015-10-28 22:06 ` [PATCH 1 19/25] hpsa: eliminate fake lun0 enclosures Don Brace
2015-10-29 20:05 ` Matthew R. Ochs
2015-10-30 8:12 ` Hannes Reinecke
2015-10-30 14:12 ` Tomas Henzl
2015-10-28 22:06 ` [PATCH 1 20/25] hpsa: add discovery polling for PT RAID devices Don Brace
2015-10-29 20:20 ` Matthew R. Ochs
[not found] ` <563286B7.8070200@pmcs.com>
2015-10-29 20:59 ` Matthew R. Ochs
2015-10-30 14:08 ` Don Brace
2015-10-30 15:58 ` Matthew R. Ochs
2015-10-30 8:15 ` Hannes Reinecke
2015-10-28 22:06 ` [PATCH 1 21/25] hpsa: disable report lun data caching Don Brace
2015-10-30 8:16 ` Hannes Reinecke
2015-10-30 14:25 ` Tomas Henzl
2015-10-30 21:18 ` Don Brace
2015-10-30 16:27 ` Matthew R. Ochs
2015-10-28 22:06 ` [PATCH 1 22/25] hpsa: enhance device messages Don Brace
2015-10-30 8:16 ` Hannes Reinecke
2015-10-30 14:32 ` Tomas Henzl
2015-11-02 16:54 ` Don Brace
2015-11-03 13:12 ` Tomas Henzl
2015-10-30 16:53 ` Matthew R. Ochs
2015-10-28 22:06 ` [PATCH 1 23/25] hpsa: fix multiple issues in path_info_show Don Brace
2015-10-30 8:18 ` Hannes Reinecke [this message]
2015-10-30 14:33 ` Tomas Henzl
2015-10-30 17:07 ` Matthew R. Ochs
2015-10-28 22:06 ` [PATCH 1 24/25] hpsa: add in sas transport class Don Brace
2015-10-30 8:21 ` Hannes Reinecke
2015-10-30 14:40 ` Tomas Henzl
2015-10-30 20:07 ` Matthew R. Ochs
2015-10-30 22:00 ` Don Brace
2015-10-30 23:23 ` Matthew R. Ochs
2015-11-03 0:40 ` kbuild test robot
2015-10-28 22:07 ` [PATCH 1 25/25] hpsa: bump the driver version Don Brace
2015-10-30 8:22 ` Hannes Reinecke
2015-10-30 14:44 ` Tomas Henzl
2015-10-30 20:08 ` Matthew R. Ochs
2015-11-03 4:49 ` [PATCH 1 00/25] hpsa updates Martin K. Petersen
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=563327CC.5040400@suse.de \
--to=hare@suse.de \
--cc=Justin.Lindley@pmcs.com \
--cc=Kevin.Barnett@pmcs.com \
--cc=don.brace@pmcs.com \
--cc=elliott@hpe.com \
--cc=hch@infradead.org \
--cc=james.bottomley@parallels.com \
--cc=linux-scsi@vger.kernel.org \
--cc=scott.benesh@pmcs.com \
--cc=scott.teel@pmcs.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.