Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 343877 - sys-block/gpart-0.1h-r2 doesn't read partition tables properly on amd64
Summary: sys-block/gpart-0.1h-r2 doesn't read partition tables properly on amd64
Status: CONFIRMED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: AMD64 Linux
: High normal with 1 vote (vote)
Assignee: Gentoo's Team for Core System packages
URL:
Whiteboard:
Keywords:
Depends on: 553108
Blocks:
  Show dependency tree
 
Reported: 2010-11-02 18:02 UTC by Ian Abbott
Modified: 2017-04-05 19:29 UTC (History)
0 users

See Also:
Package list:
Runtime testing required: ---


Attachments
Possible fix for amd64 (gpart-0.1h-amd64.patch,2.26 KB, patch)
2010-11-02 18:07 UTC, Ian Abbott
Details | Diff
Ebuild patch to use my patch for amd64 (gpart-0.1h-r2.ebuild.amd64.patch,971 bytes, patch)
2011-03-02 11:27 UTC, Ian Abbott
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Ian Abbott 2010-11-02 18:02:03 UTC
The src/gpart.h file is incompatible with amd64 in two ways:

1. The 'p_start' and 'p_size' members of the 'dos_part_entry' type are declared as 'unsigned long' which is too big on amd64 as it's supposed to be a 4-byte value.

2. The definitions of the endian macros such as 'le16(x)', 'be16(x)' end up being defined as the big-endian versions on amd64, but they should be defined as the little-endian versions, so it interprets various data items incorrectly.

(As an aside, I don't think the code works on big-endian machines anyway, but that's a separate issue.)

Reproducible: Always
Comment 1 Ian Abbott 2010-11-02 18:07:37 UTC
Created attachment 252927 [details, diff]
Possible fix for amd64

The patch uses 'unsigned int' instead of 'unsigned long' for the 'p_start' and 'p_size' members of the 'dos_part_entry' type, and makes use of the macros in #include <endian.h>. 

Note that <endian.h> probably doesn't exist on BSD libc, but previous patches already use Linux-only headers such as <asm/byteorder.h>.
Comment 2 Markos Chandras (RETIRED) gentoo-dev 2010-11-05 21:02:37 UTC
emerge --info please
Comment 3 Ian Abbott 2010-11-08 15:44:48 UTC
(In reply to comment #2)
> emerge --info please

Portage 2.1.9.24 (default/linux/amd64/10.0/desktop, gcc-4.4.5, glibc-2.12.1-r3, 2.6.37-rc1-ija1 x86_64)
=================================================================
System uname: Linux-2.6.37-rc1-ija1-x86_64-AMD_Athlon-tm-_64_X2_Dual_Core_Processor_3800+-with-gentoo-2.0.1
Timestamp of tree: Fri, 05 Nov 2010 16:15:02 +0000
app-shells/bash:     4.1_p9
dev-java/java-config: 2.1.11-r1
dev-lang/python:     2.6.6-r1, 3.1.2-r4
dev-util/cmake:      2.8.1-r2
sys-apps/baselayout: 2.0.1-r1
sys-apps/openrc:     0.6.3
sys-apps/sandbox:    2.3-r1
sys-devel/autoconf:  2.13, 2.68
sys-devel/automake:  1.8.5-r4, 1.9.6-r3, 1.10.3, 1.11.1
sys-devel/binutils:  2.20.1-r1
sys-devel/gcc:       3.3.6-r1, 3.4.6-r2, 4.2.4-r1, 4.3.5, 4.4.5
sys-devel/gcc-config: 1.4.1
sys-devel/libtool:   2.2.10
sys-devel/make:      3.82
virtual/os-headers:  2.6.35 (sys-kernel/linux-headers)
ACCEPT_KEYWORDS="amd64 ~amd64"
ACCEPT_LICENSE="*"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-march=k8 -O2 -pipe"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/share/config"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/env.d/java/ /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c"
CXXFLAGS="-march=k8 -O2 -pipe"
DISTDIR="/usr/portage/distfiles"
FEATURES="assume-digests binpkg-logs distlocks fixlafiles fixpackages news parallel-fetch protect-owned sandbox sfperms splitdebug strict unknown-features-warn unmerge-logs unmerge-orphans userfetch"
GENTOO_MIRRORS="http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo http://gentoo.oregonstate.edu http://www.ibiblio.org/pub/Linux/distributions/gentoo"
LANG="en_GB.UTF-8"
LDFLAGS="-Wl,-O1 -Wl,--as-needed"
LINGUAS="en en_GB"
MAKEOPTS="-j3"
PKGDIR="/usr/portage/packages"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY="/usr/local/portage"
SYNC="rsync://rsync.europe.gentoo.org/gentoo-portage"
USE="X a52 aac acl acpi adns alsa amd64 avahi berkdb branding bzip2 cairo cdr cgi cjk cli consolekit cracklib crypt cscope cups curl cxx dbus djvu doc dri dts dv dvd dvdr eds emboss encode esd evo exif expat fam ffmpeg firefox flac flash fontconfig fortran gdbm gif glut gmp gnome gnome-keyring gnutls gpm graphviz gstreamer gtk gtkhtml guile hal iconv idn imagemagick imap imlib ipod ipv6 java jpeg kde kerberos lcms ldap libnotify mad matroska mikmod mmx mng modules mono motif mp3 mp4 mpeg mudflap multilib musicbrainz ncurses nls nptl nptlonly nsplugin offensive ogg opengl openmp pam pango pcre pdf perl plotutils png policykit ppds pppd pulseaudio python qt3support qt4 quicktime rdesktop readline ruby samba sasl sdl semantic-desktop session slang snmp spell sqlite sse sse2 ssl startup-notification svg sysfs tcl tcltk tcpd threads tiff tk truetype unicode usb vnc vorbis x264 xcb xine xml xorg xulrunner xv xvid zlib" ALSA_CARDS="hda-intel" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx" INPUT_DEVICES="keyboard mouse evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LINGUAS="en en_GB" PHP_TARGETS="php5-2" RUBY_TARGETS="ruby18" USERLAND="GNU" VIDEO_CARDS="radeon ati vesa fbdev" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account" 
Unset:  CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, FFLAGS, INSTALL_MASK, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS


Comment 4 Ian Abbott 2011-03-02 11:27:56 UTC
Created attachment 264349 [details, diff]
Ebuild patch to use my patch for amd64

This is the patch I apply to my local copy of the ebuild to use the gpart-0.1h-amd64.patch I posted earlier.
Comment 5 Ian Abbott 2011-03-02 11:31:21 UTC
(In reply to comment #4)
> Created an attachment (id=264349) [details]
> Ebuild patch to use my patch for amd64
> 
> This is the patch I apply to my local copy of the ebuild to use the
> gpart-0.1h-amd64.patch I posted earlier.

Oh, and it also appends LFS flags to handle partitions beyond the 2 GiB boundary.
Comment 6 Martin McClure 2017-04-05 19:29:17 UTC
I would like to note that this bug causes gpart 0.1h to be completely useless on amd64. Since it reads the wrong number of bytes for partition entries (and possibly other data structures), it cannot recognize the structures it's looking for. 

In my testing, gpart 0.3 from Baruch Even's repository https://github.com/baruch/gpart works much better, and seems like a good thing to upgrade Gentoo to. This appears to be the upstream source that Debian is using, FWIW.