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

@@ -64,10 +64,12 @@
  */
 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,16 +112,22 @@
         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,
-            (sp.sp_sdev_info.sd_devpath != 0) ?
-            sp.sp_sdev_info.sd_devpath : "-",
-            sp.sp_smod_name, sp.sp_refcnt,
+            strdev, sockmod, sp.sp_refcnt,
             sp.sp_flags);
 
 
         return (DCMD_OK);
 }