<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
Olivier Daudel wrote:
<blockquote TYPE=CITE>Hi Dave,
<br>[36] and [120] are volontary ?
<br>Olivier
<p>crash> struct -o security_operations
<br>struct security_operations {
<br>        int (*ptrace)(struct task_struct
*, struct task_struct *);
<br>        int (*capget)(struct task_struct
*, kernel_cap_t *, kernel_cap_t *,
<br>        kernel_cap_t *);
<br>        int (*capset_check)(struct
task_struct *, kernel_cap_t *,
<br>kernel_cap_t *,
<br>        kernel_cap_t *);
<br>        void (*capset_set)(struct
task_struct *, kernel_cap_t *,
<br>kernel_cap_t *,
<br>        kernel_cap_t *);
<br>        int (*acct)(struct file
*);
<br>        int (*sysctl)(struct ctl_table
*, int);
<br>        int (*capable)(struct task_struct
*, int);
<br>        int (*quotactl)(int, int,
int, struct super_block *);
<br>        int (*quota_on)(struct dentry
*);
<br>   [36] int (*syslog)(int);
<br>        int (*settime)(struct timespec
*, struct timezone *);
<br>        int (*vm_enough_memory)(long
int);
<br>        int (*bprm_alloc_security)(struct
linux_binprm *);
<br>        void (*bprm_free_security)(struct
linux_binprm *);
<br>        void (*bprm_apply_creds)(struct
linux_binprm *, int);
<br>        void (*bprm_post_apply_creds)(struct
linux_binprm *);
<br>        int (*bprm_set_security)(struct
linux_binprm *);
<br>        int (*bprm_check_security)(struct
linux_binprm *);
<br>        int (*bprm_secureexec)(struct
linux_binprm *);
<br>        int (*sb_alloc_security)(struct
super_block *);
<br>        void (*sb_free_security)(struct
super_block *);
<br>        int (*sb_copy_data)(struct
file_system_type *, void *, void *);
<br>        int (*sb_kern_mount)(struct
super_block *, void *);
<br>        int (*sb_statfs)(struct
super_block *);
<br>        int (*sb_mount)(char *,
struct nameidata *, char *, long unsigned
<br>int,
<br>        void *);
<br>        int (*sb_check_sb)(struct
vfsmount *, struct nameidata *);
<br>        int (*sb_umount)(struct
vfsmount *, int);
<br>        void (*sb_umount_close)(struct
vfsmount *);
<br>        void (*sb_umount_busy)(struct
vfsmount *);
<br>        void (*sb_post_remount)(struct
vfsmount *, long unsigned int, void
<br>*);
<br>  [120] void (*sb_post_mountroot)(void);
<br>        void (*sb_post_addmount)(struct
vfsmount *, struct nameidata *);
<br>[...]
<br>}
<br>SIZE: 560
<br><a href="https://www.redhat.com/mailman/listinfo/crash-utility"></a> </blockquote>
<tt>No, definitely a bug, the offsets are *supposed* to be shown</tt>
<br><tt>for all members.  I've seen this before, usually when the</tt>
<br><tt>member is a function pointer type argument.</tt><tt></tt>
<p><tt>By adding some debug code to symbols.c:show_member_offset(),</tt>
<br><tt>when nothing (i.e., no offset) gets printed, it's because</tt>
<br><tt>show_member_offset() is either (1) bailing out because it can't</tt>
<br><tt>determine its "target" string pointer value, or (2) it sets</tt>
<br><tt>the "target" string incorrectly, and therefore the MEMBER_OFFSET()</tt>
<br><tt>call to gdb fails.  The "target" string is supposed to pick
out</tt>
<br><tt>the member from the complete declaration line returned by gdb.</tt><tt></tt>
<p><tt>It needs fixing -- if you don't get to it first, I'll get around</tt>
<br><tt>to it eventually.</tt><tt></tt>
<p><tt>Thanks,</tt>
<br><tt>  Dave</tt>
<br><tt></tt> </html>