RHEL Engineering is moving the tracking of its product development work on RHEL 6 through RHEL 9 to Red Hat Jira (issues.redhat.com). If you're a Red Hat customer, please continue to file support cases via the Red Hat customer portal. If you're not, please head to the "RHEL project" in Red Hat Jira and file new tickets here. Individual Bugzilla bugs in the statuses "NEW", "ASSIGNED", and "POST" are being migrated throughout September 2023. Bugs of Red Hat partners with an assigned Engineering Partner Manager (EPM) are migrated in late September as per pre-agreed dates. Bugs against components "kernel", "kernel-rt", and "kpatch" are only migrated if still in "NEW" or "ASSIGNED". If you cannot log in to RH Jira, please consult article #7032570. That failing, please send an e-mail to the RH Jira admins at rh-issues@redhat.com to troubleshoot your issue as a user management inquiry. The email creates a ServiceNow ticket with Red Hat. Individual Bugzilla bugs that are migrated will be moved to status "CLOSED", resolution "MIGRATED", and set with "MigratedToJIRA" in "Keywords". The link to the successor Jira issue will be found under "Links", have a little "two-footprint" icon next to it, and direct you to the "RHEL project" in Red Hat Jira (issue links are of type "https://issues.redhat.com/browse/RHEL-XXXX", where "X" is a digit). This same link will be available in a blue banner at the top of the page informing you that that bug has been migrated.
Bug 1297832 - crash is confused by __aligned__ attribute on a member of a structure
Summary: crash is confused by __aligned__ attribute on a member of a structure
Keywords:
Status: CLOSED NOTABUG
Alias: None
Product: Red Hat Enterprise Linux 7
Classification: Red Hat
Component: crash
Version: 7.2
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: rc
: ---
Assignee: Dave Anderson
QA Contact: Kernel General QE
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2016-01-12 15:00 UTC by Jerome Marchand
Modified: 2019-02-19 21:41 UTC (History)
0 users

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2016-01-12 15:45:31 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)

Description Jerome Marchand 2016-01-12 15:00:12 UTC
Description of problem:

The use of an __aligned__ attribute on a member of a structure seems to confuse crash which shows am incorrect size for the structure.
According to gcc documentation, an aligned attribute to a member of a structure force the alignment of the member and the structure itself.

Version-Release number of selected component (if applicable):


How reproducible:
Always.

Steps to Reproduce:
Display such a structure (e.g. crypto_tfm) in crash.

Actual results:

crash> struct -xo crypto_tfm
struct crypto_tfm {
   [0x0] u32 crt_flags;
         union {
             struct ablkcipher_tfm ablkcipher;
             struct aead_tfm aead;
             struct blkcipher_tfm blkcipher;
             struct cipher_tfm cipher;
             struct hash_tfm hash;
             struct compress_tfm compress;
             struct rng_tfm rng;
   [0x8] } crt_u;
  [0x48] void (*exit)(struct crypto_tfm *);
  [0x50] struct crypto_alg *__crt_alg;
  [0x58] void *__crt_ctx[];
}
SIZE: 0x58

Analyse of the asm of some code that access __crt_ctx (the aligned member) shows that its offset is indeed 0x58. The size is therefore wrong.

Expected results:

crash shows the right size (in this case I guess 0x60).

struct crypto_tfm {
   [0x0] u32 crt_flags;
         union {
             struct ablkcipher_tfm ablkcipher;
             struct aead_tfm aead;
             struct blkcipher_tfm blkcipher;
             struct cipher_tfm cipher;
             struct hash_tfm hash;
             struct compress_tfm compress;
             struct rng_tfm rng;
   [0x8] } crt_u;
  [0x48] void (*exit)(struct crypto_tfm *);
  [0x50] struct crypto_alg *__crt_alg;
  [0x58] void *__crt_ctx[];
}
SIZE: 0x60

Additional info:

Comment 2 Dave Anderson 2016-01-12 15:20:38 UTC
Crash is simply reporting the size that the embedded gdb module returns:

crash> struct -o crypto_tfm
struct crypto_tfm {
   [0] u32 crt_flags;
       union {
           struct ablkcipher_tfm ablkcipher;
           struct aead_tfm aead;
           struct blkcipher_tfm blkcipher;
           struct cipher_tfm cipher;
           struct hash_tfm hash;
           struct compress_tfm compress;
           struct rng_tfm rng;
   [8] } crt_u;
  [72] void (*exit)(struct crypto_tfm *);
  [80] struct crypto_alg *__crt_alg;
  [88] void *__crt_ctx[];
}
SIZE: 88
crash> q


$ gdb vmlinux
GNU gdb (GDB) Fedora (7.4.50.20120120-54.fc17)
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/dumps/3.10.0-305.el7.x86_64_OOM_kill_cgroup_1257117/vmlinux...done.
(gdb) print sizeof(struct crypto_tfm)
$1 = 88
(gdb) 


I wonder if it's more to do with the fact that it's declared as an
empty array?

Comment 3 Dave Anderson 2016-01-12 15:38:29 UTC
> I wonder if it's more to do with the fact that it's declared as an
> empty array?

$ cat junk.c

#include <stdio.h>

struct simple {
	long a, b;
};

struct flexible {
	long a, b;
	void *__crt_ctx[];
};

main()
{
	printf("%d\n", sizeof(struct simple));
	printf("%d\n", sizeof(struct flexible));
}


$ cc -o junk junk.c
$ ./junk
16
16
$

Comment 4 Dave Anderson 2016-01-12 15:39:22 UTC
I'm not going to touch this...


Note You need to log in before you can comment on or make changes to this bug.