Project

General

Profile

Bug #11831

Undefined behavior issues

Added by octoploid (octoploid octoploid) almost 4 years ago. Updated almost 3 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-linux]
[ruby-core:72211]

Description

Building ruby-2.2.4 with gcc's -fsanitize=undefined shows:

...
./miniruby -I./lib -I. -I.ext/common ./tool/mkconfig.rb -timestamp=.rbconfig.time \
-install_name=ruby22 \
-so_name=ruby22 rbconfig.rb
siphash.c:417:8: runtime error: load of misaligned address 0x000000835093 for type 'uint64_t', which requires 8 byte alignment
0x000000835093: note: pointer points here
61 6d 65 00 5f 5f 61 75 74 6f 6c 6f 61 64 5f 5f 00 63 61 6e 27 74 20 61 6c 69 61 73 20 69 6e 20
^
siphash.c:452:43: runtime error: load of misaligned address 0x00000083509b for type 'uint32_t', which requires 4 byte alignment
0x00000083509b: note: pointer points here
74 6f 6c 6f 61 64 5f 5f 00 63 61 6e 27 74 20 61 6c 69 61 73 20 69 6e 20 74 72 61 63 65 72 00 23
^
./miniruby -I./lib -I. -I.ext/common ./tool/generic_erb.rb -c -o encdb.h ./template/encdb.h.tmpl ./enc enc
st.c:1583:7: runtime error: load of misaligned address 0x00000083756c for type 'st_index_t', which requires 8 byte alignment
0x00000083756c: note: pointer points here
65 2e 63 00 65 6e 63 2f 65 6e 63 64 62 2e 73 6f 00 65 6e 63 2f 74 72 61 6e 73 2f 74 72 61 6e 73
^
siphash.c:417:8: runtime error: load of misaligned address 0x000000835093 for type 'uint64_t', which requires 8 byte alignment
0x000000835093: note: pointer points here
61 6d 65 00 5f 5f 61 75 74 6f 6c 6f 61 64 5f 5f 00 63 61 6e 27 74 20 61 6c 69 61 73 20 69 6e 20
^
siphash.c:452:43: runtime error: load of misaligned address 0x00000083509b for type 'uint32_t', which requires 4 byte alignment
0x00000083509b: note: pointer points here
74 6f 6c 6f 61 64 5f 5f 00 63 61 6e 27 74 20 61 6c 69 61 73 20 69 6e 20 74 72 61 63 65 72 00 23
^
st.c:1583:7: runtime error: load of misaligned address 0x00000083756c for type 'st_index_t', which requires 8 byte alignment
0x00000083756c: note: pointer points here
65 2e 63 00 65 6e 63 2f 65 6e 63 64 62 2e 73 6f 00 65 6e 63 2f 74 72 61 6e 73 2f 74 72 61 6e 73
^
regexec.c:2632:7: runtime error: load of misaligned address 0x0000026ec3b2 for type 'RelAddrType', which requires 4 byte alignment
0x0000026ec3b2: note: pointer points here
00 00 2b 40 0e 00 00 00 07 09 00 00 00 61 63 5f 67 69 76 65 6e 5f 07 08 00 00 00 49 4e 53 54 41
^
regexec.c:1632:7: runtime error: load of misaligned address 0x0000026ec3b7 for type 'LengthType', which requires 4 byte alignment
0x0000026ec3b7: note: pointer points here
00 00 00 07 09 00 00 00 61 63 5f 67 69 76 65 6e 5f 07 08 00 00 00 49 4e 53 54 41 4c 4c 3d 37 01
^
regexec.c:2624:7: runtime error: load of misaligned address 0x0000027ccc41 for type 'RelAddrType', which requires 4 byte alignment
0x0000027ccc41: note: pointer points here
00 23 41 3f f4 ff ff ff 3b 01 00 03 22 5d 40 27 00 00 00 10 00 3e 00 00 01 00 00 00 00 00 00 00
^
regexec.c:1759:11: runtime error: load of misaligned address 0x0000027ccc55 for type 'Bits', which requires 4 byte alignment
0x0000027ccc55: note: pointer points here
00 3e 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
^
regexec.c:2296:7: runtime error: load of misaligned address 0x0000027cccad for type 'MemNumType', which requires 2 byte alignment
0x0000027cccad: note: pointer points here
00 1b 22 3b 02 00 02 22 40 26 00 00 00 10 00 3e 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
^
regexec.c:2695:7: runtime error: load of misaligned address 0x0000027d75df for type 'RelAddrType', which requires 4 byte alignment
0x0000027d75df: note: pointer points here
00 00 23 43 06 00 00 00 4f 23 3f f4 ff ff ff 05 4f 42 4a 53 2c 01 00 00 00 00 00 00 00 01 0a 00
^
regexec.c:2275:7: runtime error: load of misaligned address 0x00000281f723 for type 'MemNumType', which requires 2 byte alignment
0x00000281f723: note: pointer points here
03 24 7b 38 02 00 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 00 00 00 00 00 00 00 00 00
^
regexec.c:1814:11: runtime error: load of misaligned address 0x00000281f732 for type 'Bits', which requires 4 byte alignment
0x00000281f732: note: pointer points here
00 00 00 00 00 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 27 00 00 00 13 00 00
^
regexec.c:2282:7: runtime error: load of misaligned address 0x0000027caedb for type 'MemNumType', which requires 2 byte alignment
0x0000027caedb: note: pointer points here
ff ff ff 37 02 00 40 02 00 00 00 02 2d 10 00 00 00 00 00 00 ff 03 00 00 00 00 00 00 00 00 00 00
^
regexec.c:2823:7: runtime error: load of misaligned address 0x0000027cbbbe for type 'RelAddrType', which requires 4 byte alignment
0x0000027cbbbe: note: pointer points here
37 01 00 50 14 00 00 00 40 0a 00 00 00 05 61 62 73 5f 3f 04 00 00 00 04 6f 6c 64 51 10 00 00 00
^
rbconfig.rb updated
./miniruby -I./lib -I. -I.ext/common "./tool/generic_erb.rb" -o verconf.h ./template/verconf.h.tmpl
./miniruby -I./lib -I. -I.ext/common ./enc/make_encmake.rb --builtin-encs="ascii.o us_ascii.o unicode.o utf_8.o" --builtin-transes="newline.o" --module enc.mk
regexec.c:2632:7: runtime error: load of misaligned address 0x00000169763b for type 'RelAddrType', which requires 4 byte alignment
0x00000169763b: note: pointer points here
3b 01 00 40 08 00 00 00 38 02 00 17 19 3b 02 00 01 2a 76 61 6c 29 0a 00 00 00 00 00 00 00 00 00
^
regexec.c:2282:7: runtime error: load of misaligned address 0x0000016978d5 for type 'MemNumType', which requires 2 byte alignment
0x0000016978d5: note: pointer points here
03 2d 2d 37 01 00 40 26 00 00 00 13 00 3e 00 00 01 00 00 20 00 00 00 28 00 00 00 00 00 00 00 00
^
regexec.c:1814:11: runtime error: load of misaligned address 0x0000016978e9 for type 'Bits', which requires 4 byte alignment
0x0000016978e9: note: pointer points here
00 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f d5 ff ff ff 3b 01 00
^
regexec.c:2624:7: runtime error: load of misaligned address 0x0000016978fe for type 'RelAddrType', which requires 4 byte alignment
0x0000016978fe: note: pointer points here
00 00 00 3f d5 ff ff ff 3b 01 00 40 08 00 00 00 38 02 00 17 19 3b 02 00 01 65 64 20 77 69 74 68
^
regexec.c:2296:7: runtime error: load of misaligned address 0x000001697903 for type 'MemNumType', which requires 2 byte alignment
0x000001697903: note: pointer points here
ff ff ff 3b 01 00 40 08 00 00 00 38 02 00 17 19 3b 02 00 01 65 64 20 77 69 74 68 69 6e 0a 00 00
^
regexec.c:2275:7: runtime error: load of misaligned address 0x00000169790b for type 'MemNumType', which requires 2 byte alignment
0x00000169790b: note: pointer points here
00 00 00 38 02 00 17 19 3b 02 00 01 65 64 20 77 69 74 68 69 6e 0a 00 00 00 00 00 00 00 00 00 00
^
...

The upcoming gcc-6 actually "miscompiles" ./miniruby due to these issues.


Related issues

Related to Ruby master - Bug #11979: gcc-6 fails to optimize regcomp.c:compile_length_quantifier_node()ClosedActions

Associated revisions

Revision 04c55c07
Added by nobu (Nobuyoshi Nakada) over 3 years ago

disable unaligned word access

  • regint.h: disable unaligned word access with gcc 6 or later. [Bug #11831]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53545 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 53545
Added by nobu (Nobuyoshi Nakada) over 3 years ago

disable unaligned word access

  • regint.h: disable unaligned word access with gcc 6 or later. [Bug #11831]

Revision 53545
Added by nobu (Nobuyoshi Nakada) over 3 years ago

disable unaligned word access

  • regint.h: disable unaligned word access with gcc 6 or later. [Bug #11831]

Revision 53545
Added by nobu (Nobuyoshi Nakada) over 3 years ago

disable unaligned word access

  • regint.h: disable unaligned word access with gcc 6 or later. [Bug #11831]

Revision 53545
Added by nobu (Nobuyoshi Nakada) over 3 years ago

disable unaligned word access

  • regint.h: disable unaligned word access with gcc 6 or later. [Bug #11831]

Revision fd7b490f
Added by nobu (Nobuyoshi Nakada) over 3 years ago

disable unaligned word access

  • include/ruby/defines.h, st.c: disable unaligned word access with gcc 6 or later. [Bug #11831]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53546 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 53546
Added by nobu (Nobuyoshi Nakada) over 3 years ago

disable unaligned word access

  • include/ruby/defines.h, st.c: disable unaligned word access with gcc 6 or later. [Bug #11831]

Revision 53546
Added by nobu (Nobuyoshi Nakada) over 3 years ago

disable unaligned word access

  • include/ruby/defines.h, st.c: disable unaligned word access with gcc 6 or later. [Bug #11831]

Revision 53546
Added by nobu (Nobuyoshi Nakada) over 3 years ago

disable unaligned word access

  • include/ruby/defines.h, st.c: disable unaligned word access with gcc 6 or later. [Bug #11831]

Revision 53546
Added by nobu (Nobuyoshi Nakada) over 3 years ago

disable unaligned word access

  • include/ruby/defines.h, st.c: disable unaligned word access with gcc 6 or later. [Bug #11831]

Revision b888ee25
Added by naruse (Yui NARUSE) over 3 years ago

revert UNALIGNED_WORD_ACCESS for GCC6

Released GCC 6.0 fixed the issue.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69291
[ruby-core:72211] [Bug #11831] [Bug #11979]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54855 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 54855
Added by naruse (Yui NARUSE) over 3 years ago

revert UNALIGNED_WORD_ACCESS for GCC6

Released GCC 6.0 fixed the issue.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69291
[ruby-core:72211] [Bug #11831] [Bug #11979]

Revision 54855
Added by naruse (Yui NARUSE) over 3 years ago

revert UNALIGNED_WORD_ACCESS for GCC6

Released GCC 6.0 fixed the issue.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69291
[ruby-core:72211] [Bug #11831] [Bug #11979]

Revision 54855
Added by naruse (Yui NARUSE) over 3 years ago

revert UNALIGNED_WORD_ACCESS for GCC6

Released GCC 6.0 fixed the issue.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69291
[ruby-core:72211] [Bug #11831] [Bug #11979]

Revision 54855
Added by naruse (Yui NARUSE) over 3 years ago

revert UNALIGNED_WORD_ACCESS for GCC6

Released GCC 6.0 fixed the issue.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69291
[ruby-core:72211] [Bug #11831] [Bug #11979]

History

#1

Updated by naruse (Yui NARUSE) over 3 years ago

  • Related to Bug #11979: gcc-6 fails to optimize regcomp.c:compile_length_quantifier_node() added

Updated by ngoto (Naohisa Goto) over 3 years ago

Since r53543, unaligned word access can be disabled with ./configure CPPFLAGS="-DUNALIGNED_WORD_ACCESS=0"
I think the "load of misaligned address" error can be squashed by this.

Updated by octoploid (octoploid octoploid) over 3 years ago

Naohisa Goto wrote:

Since r53543, unaligned word access can be disabled with ./configure CPPFLAGS="-DUNALIGNED_WORD_ACCESS=0"
I think the "load of misaligned address" error can be squashed by this.

Thanks Goto-san. This fixes the issue.

And BTW it turned out that the gcc-6 build failure (Bug #11979) is unrelated to alignment,
but it is fortunately already fixed in current gcc trunk (of today, Jan 15).

#4

Updated by nobu (Nobuyoshi Nakada) over 3 years ago

  • Status changed from Open to Closed

Applied in changeset r53545.


disable unaligned word access

  • regint.h: disable unaligned word access with gcc 6 or later. [Bug #11831]

Updated by octoploid (octoploid octoploid) almost 3 years ago

It looks like the issue popped up again.
Both ruby-2.3.2 and ruby-2.2.6 defined PLATFORM_UNALIGNED_WORD_ACCESS
unconditionally on x86_64.
This is wrong and invokes undefined behavior.

Also available in: Atom PDF