[Crash-utility] [ANNOUNCE] crash version 6.1.6 is available

Dave Anderson anderson at redhat.com
Thu Apr 4 15:13:37 UTC 2013


Download from: http://people.redhat.com/anderson

Changelog:
  
 - Fix for a crash-6.1.5 regression that causes the "mount" command
   to fail on kernel versions prior to Linux 3.3.  Without the patch,
   the command fails with the message "mount: invalid structure member
   offset: mount_mnt_devname".  

   The regression was caused by this patch:

    - Patch to the internal gdb_get_datatype() function to return the
      typecode and length of integer variables.
      (adrian.wenl at gmail.com, anderson at redhat.com)

   which inadvertently caused the STRUCT_SIZE("mount") macro to return
   a false positive for the non-existent "mount" data structure due to 
   the existence of a "mount" kernel symbol in "security/inode.c".  

   The patch above was requested as an aid for an extension module, 
   and had no use with respect to the base crash utility.  However, the
   patch has the unintended side effect of allowing macros such as 
   STRUCT_SIZE(), STRUCT_EXISTS(), MEMBER_OFFSET() and MEMBER_EXISTS() 
   to return false positives.  All of the macros call datatype_info(), 
   a function that expects a data type argument.  If the passed-in
   data type argument does not exist, but there does happen to be a 
   kernel variable with the same name, then it used to be rejected 
   because the internal gdb_get_datatype() function purposefully did 
   not return the typecode and length of kernel variables.  However,
   the patch above modified that functionality, and gdb_get_datatype()
   started to return the typecode and length of kernel variables.

   In order to allow an extension module the capability of utilizing
   the internal gdb_get_datatype() function with a kernel variable name 
   instead of a data type, the patch above has been modified to return 
   the typecode and length of data variables only if an additional, new,
   GNU_VAR_LENGTH_TYPECODE flag is set in the gnu_request.flags field.
   As it stands now, that flag is not used by the base crash utility.

   Furthermore, as a defensive mechanism against future breakage, the
   STRUCT_SIZE() and STRUCT_EXISTS() macros have been modified to pass 
   a special non-NULL, third argument to datatype_info() that will 
   enforce the fact that the request is only functional for data type 
   names.  In addition, the MEMBER_OFFSET() and MEMBER_EXISTS() handling
   in datatype_info() has been fortified to ensure that the base data 
   type is in fact a structure or union.  It should also be noted that 
   extension modules that were compiled with the old STRUCT_SIZE() or 
   STRUCT_EXISTS() macro definitions will still work as they did before.
   (anderson at redhat.com)




More information about the Crash-utility mailing list