[Crash-utility] Any comment on this output ?

Dave Anderson anderson at redhat.com
Mon Oct 16 18:44:30 UTC 2006


Olivier Daudel wrote:

> Hi Dave,
> [36] and [120] are volontary ?
> Olivier
>
> crash> struct -o security_operations
> struct security_operations {
>         int (*ptrace)(struct task_struct *, struct task_struct *);
>         int (*capget)(struct task_struct *, kernel_cap_t *, kernel_cap_t *,
>         kernel_cap_t *);
>         int (*capset_check)(struct task_struct *, kernel_cap_t *,
> kernel_cap_t *,
>         kernel_cap_t *);
>         void (*capset_set)(struct task_struct *, kernel_cap_t *,
> kernel_cap_t *,
>         kernel_cap_t *);
>         int (*acct)(struct file *);
>         int (*sysctl)(struct ctl_table *, int);
>         int (*capable)(struct task_struct *, int);
>         int (*quotactl)(int, int, int, struct super_block *);
>         int (*quota_on)(struct dentry *);
>    [36] int (*syslog)(int);
>         int (*settime)(struct timespec *, struct timezone *);
>         int (*vm_enough_memory)(long int);
>         int (*bprm_alloc_security)(struct linux_binprm *);
>         void (*bprm_free_security)(struct linux_binprm *);
>         void (*bprm_apply_creds)(struct linux_binprm *, int);
>         void (*bprm_post_apply_creds)(struct linux_binprm *);
>         int (*bprm_set_security)(struct linux_binprm *);
>         int (*bprm_check_security)(struct linux_binprm *);
>         int (*bprm_secureexec)(struct linux_binprm *);
>         int (*sb_alloc_security)(struct super_block *);
>         void (*sb_free_security)(struct super_block *);
>         int (*sb_copy_data)(struct file_system_type *, void *, void *);
>         int (*sb_kern_mount)(struct super_block *, void *);
>         int (*sb_statfs)(struct super_block *);
>         int (*sb_mount)(char *, struct nameidata *, char *, long unsigned
> int,
>         void *);
>         int (*sb_check_sb)(struct vfsmount *, struct nameidata *);
>         int (*sb_umount)(struct vfsmount *, int);
>         void (*sb_umount_close)(struct vfsmount *);
>         void (*sb_umount_busy)(struct vfsmount *);
>         void (*sb_post_remount)(struct vfsmount *, long unsigned int, void
> *);
>   [120] void (*sb_post_mountroot)(void);
>         void (*sb_post_addmount)(struct vfsmount *, struct nameidata *);
> [...]
> }
> SIZE: 560
>

No, definitely a bug, the offsets are *supposed* to be shown
for all members.  I've seen this before, usually when the
member is a function pointer type argument.

By adding some debug code to symbols.c:show_member_offset(),
when nothing (i.e., no offset) gets printed, it's because
show_member_offset() is either (1) bailing out because it can't
determine its "target" string pointer value, or (2) it sets
the "target" string incorrectly, and therefore the MEMBER_OFFSET()
call to gdb fails.  The "target" string is supposed to pick out
the member from the complete declaration line returned by gdb.

It needs fixing -- if you don't get to it first, I'll get around
to it eventually.

Thanks,
  Dave

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20061016/616e1ef4/attachment.htm>


More information about the Crash-utility mailing list