Print this page
2602 mdb ::sockparams SEGV
2602 mdb ::sockparams SEGV

*** 64,73 **** --- 64,75 ---- */ static int sockparams_prt(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv) { struct sockparams sp; + char strdev[MAXPATHLEN]; + char sockmod[MODMAXNAMELEN]; if ((flags & DCMD_ADDRSPEC) == 0) { uint_t opt_e = 0; uint_t opt_E = 0;
*** 110,125 **** if (mdb_vread(&sp, sizeof (sp), addr) == -1) { mdb_warn("failed to read sockparams at %0?p", addr); return (DCMD_ERR); } mdb_printf("%0?p %3u %3u %3u %15s %15s %6u %#6x\n", addr, sp.sp_family, sp.sp_type, sp.sp_protocol, ! (sp.sp_sdev_info.sd_devpath != 0) ? ! sp.sp_sdev_info.sd_devpath : "-", ! sp.sp_smod_name, sp.sp_refcnt, sp.sp_flags); return (DCMD_OK); } --- 112,133 ---- if (mdb_vread(&sp, sizeof (sp), addr) == -1) { mdb_warn("failed to read sockparams at %0?p", addr); return (DCMD_ERR); } + if ((sp.sp_sdev_info.sd_devpath == NULL) || + (mdb_readstr(strdev, sizeof (strdev), + (uintptr_t)sp.sp_sdev_info.sd_devpath) <= 0)) + strcpy(strdev, "-"); + if (mdb_readstr(sockmod, sizeof (sockmod), + (uintptr_t)sp.sp_smod_name) <= 0) + strcpy(sockmod, ""); + mdb_printf("%0?p %3u %3u %3u %15s %15s %6u %#6x\n", addr, sp.sp_family, sp.sp_type, sp.sp_protocol, ! strdev, sockmod, sp.sp_refcnt, sp.sp_flags); return (DCMD_OK); }