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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).