Re: [PATCH] scsi: print actual pointer addresses if using scsi debug logging

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks for looking Steffen.  I failed to notice the no_hash_pointers
option.  I do think it would be a reasonable convenience for debug
scsi logging to print the actual address without having to go through
the trouble of rebooting enabling the no_hash_pointers parameter then
rebooting again to disable afterward.  Perhaps the system is a
production box that can't be rebooted. Maybe an additional sysctl to
enable no_hash_pointers would be reasonable?  That way it could be
changed online?  Thanks again.

On Fri, Jan 21, 2022 at 1:24 PM Steffen Maier <maier@xxxxxxxxxxxxx> wrote:
>
> On 1/21/22 17:49, John Pittman wrote:
> > Since commit ad67b74d2469 ("printk: hash addresses printed with
> > %p"), any addresses printed with an unadorned %p will be hashed.
> > However, when scsi debug logging is enabled, in general, the
> > user needs the actual address for use with address tracking or
> > vmcore analysis.  Print the actual address for pointers when
> > using the SCSI_LOG_* macros.
>
> While scsi_logging_level defaults to 0, i.e. all disabled, and it requires root
> privileges to increase it, I wonder how unconditionally unmodified addresses
> for scsi logging would relate to KASLR.
>
> Why not have the root user use no_hash_pointers with the existing plain
> pointers %p when setting scsi_logging_level?
> That way, it would be a clear and deliberate unhashing choice to be done by
> higher powers.
> Is it because changing no_hash_pointers does not seem dynamic as opposed to
> changing scsi_logging_level? I could not find such info in the patch description.
> Or would you delegate user access control to unmodified addresses in scsi
> logging kernel messages to
> https://www.kernel.org/doc/html/latest/admin-guide/sysctl/kernel.html#dmesg-restrict
> ?
>
> While still not being unambiguous, I often try to use the CDB for correlation
> of scsi logs with pending (request) objects in a crash dump. Would that be an
> alternative to pointers? AFAIK, with scsi_cmnd being re-used, the pointers are
>   not unique for a particular request as time progresses.
> Enabling SCSI tracepoints on top can also be useful.
>
> References
>
> https://www.kernel.org/doc/html/latest/core-api/printk-formats.html#plain-pointers
> "If not possible, and the aim of printing the address is to provide more
> information for debugging, use %p and boot the kernel with the no_hash_pointers
> parameter during debugging, which will print all %p addresses unmodified."
>
> https://www.kernel.org/doc/html/latest/core-api/printk-formats.html#unmodified-addresses
> "Before using %px, consider if using %p is sufficient together with enabling
> the no_hash_pointers kernel parameter during debugging sessions"
>
> >
> > Signed-off-by: John Pittman <jpittman@xxxxxxxxxx>
> > Collab-from: David Jeffery <djeffery@xxxxxxxxxx>
> > ---
> >   drivers/scsi/scsi.c     | 2 +-
> >   drivers/scsi/scsi_lib.c | 2 +-
> >   drivers/scsi/sg.c       | 8 ++++----
> >   drivers/scsi/sr.c       | 2 +-
> >   4 files changed, 7 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
> > index 211aace69c22..0f558135637c 100644
> > --- a/drivers/scsi/scsi.c
> > +++ b/drivers/scsi/scsi.c
> > @@ -106,7 +106,7 @@ void scsi_log_send(struct scsi_cmnd *cmd)
> >                                      SCSI_LOG_MLQUEUE_BITS);
> >               if (level > 1) {
> >                       scmd_printk(KERN_INFO, cmd,
> > -                                 "Send: scmd 0x%p\n", cmd);
> > +                                 "Send: scmd 0x%px\n", cmd);
> >                       scsi_print_command(cmd);
> >               }
> >       }
> > diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
> > index 35e381f6d371..a25ab894383b 100644
> > --- a/drivers/scsi/scsi_lib.c
> > +++ b/drivers/scsi/scsi_lib.c
> > @@ -148,7 +148,7 @@ static void __scsi_queue_insert(struct scsi_cmnd *cmd, int reason, bool unbusy)
> >       struct scsi_device *device = cmd->device;
> >
> >       SCSI_LOG_MLQUEUE(1, scmd_printk(KERN_INFO, cmd,
> > -             "Inserting command %p into mlqueue\n", cmd));
> > +             "Inserting command %px into mlqueue\n", cmd));
> >
> >       scsi_set_blocked(cmd, reason);
> >
> > diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
> > index ad12b3261845..2b11dc84d04b 100644
> > --- a/drivers/scsi/sg.c
> > +++ b/drivers/scsi/sg.c
> > @@ -1274,7 +1274,7 @@ sg_mmap(struct file *filp, struct vm_area_struct *vma)
> >               return -ENXIO;
> >       req_sz = vma->vm_end - vma->vm_start;
> >       SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sfp->parentdp,
> > -                                   "sg_mmap starting, vm_start=%p, len=%d\n",
> > +                                   "sg_mmap starting, vm_start=%px, len=%d\n",
> >                                     (void *) vma->vm_start, (int) req_sz));
> >       if (vma->vm_pgoff)
> >               return -EINVAL; /* want no offset */
> > @@ -1944,7 +1944,7 @@ sg_remove_scat(Sg_fd * sfp, Sg_scatter_hold * schp)
> >                       for (k = 0; k < schp->k_use_sg && schp->pages[k]; k++) {
> >                               SCSI_LOG_TIMEOUT(5,
> >                                       sg_printk(KERN_INFO, sfp->parentdp,
> > -                                     "sg_remove_scat: k=%d, pg=0x%p\n",
> > +                                     "sg_remove_scat: k=%d, pg=0x%px\n",
> >                                       k, schp->pages[k]));
> >                               __free_pages(schp->pages[k], schp->page_order);
> >                       }
> > @@ -2156,7 +2156,7 @@ sg_add_sfp(Sg_device * sdp)
> >       list_add_tail(&sfp->sfd_siblings, &sdp->sfds);
> >       write_unlock_irqrestore(&sdp->sfd_lock, iflags);
> >       SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp,
> > -                                   "sg_add_sfp: sfp=0x%p\n", sfp));
> > +                                   "sg_add_sfp: sfp=0x%px\n", sfp));
> >       if (unlikely(sg_big_buff != def_reserved_size))
> >               sg_big_buff = def_reserved_size;
> >
> > @@ -2200,7 +2200,7 @@ sg_remove_sfp_usercontext(struct work_struct *work)
> >       }
> >
> >       SCSI_LOG_TIMEOUT(6, sg_printk(KERN_INFO, sdp,
> > -                     "sg_remove_sfp: sfp=0x%p\n", sfp));
> > +                     "sg_remove_sfp: sfp=0x%px\n", sfp));
> >       kfree(sfp);
> >
> >       scsi_device_put(sdp->device);
> > diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
> > index f925b1f1f9ad..3b942c99a783 100644
> > --- a/drivers/scsi/sr.c
> > +++ b/drivers/scsi/sr.c
> > @@ -411,7 +411,7 @@ static blk_status_t sr_init_command(struct scsi_cmnd *SCpnt)
> >               SCSI_LOG_HLQUEUE(2, scmd_printk(KERN_INFO, SCpnt,
> >                       "Finishing %u sectors\n", blk_rq_sectors(rq)));
> >               SCSI_LOG_HLQUEUE(2, scmd_printk(KERN_INFO, SCpnt,
> > -                     "Retry with 0x%p\n", SCpnt));
> > +                     "Retry with 0x%px\n", SCpnt));
> >               goto out;
> >       }
> >
>
>
> --
> Mit freundlichen Gruessen / Kind regards
> Steffen Maier
>
> Linux on IBM Z and LinuxONE
>
> https://www.ibm.com/privacy/us/en/
> IBM Deutschland Research & Development GmbH
> Vorsitzender des Aufsichtsrats: Gregor Pillen
> Geschaeftsfuehrung: David Faller, Dirk Wittkopp
> Sitz der Gesellschaft: Boeblingen
> Registergericht: Amtsgericht Stuttgart, HRB 243294
>




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux