Bug 579836
Summary: | backport fix for upstream #1809658 from 1.40.4 - libcom_err bug | ||
---|---|---|---|
Product: | Red Hat Enterprise Linux 5 | Reporter: | Nalin Dahyabhai <nalin> |
Component: | e2fsprogs | Assignee: | Eric Sandeen <esandeen> |
Status: | CLOSED ERRATA | QA Contact: | BaseOS QE - Apps <qe-baseos-apps> |
Severity: | low | Docs Contact: | |
Priority: | low | ||
Version: | 5.5 | CC: | bnater, sct |
Target Milestone: | rc | ||
Target Release: | --- | ||
Hardware: | x86_64 | ||
OS: | Linux | ||
URL: | http://sourceforge.net/tracker/?func=detail&aid=1809658&group_id=2406&atid=102406 | ||
Whiteboard: | |||
Fixed In Version: | e2fsprogs-1.39-28.el5 | Doc Type: | Bug Fix |
Doc Text: | Story Points: | --- | |
Clone Of: | Environment: | ||
Last Closed: | 2011-07-21 09:07:43 UTC | Type: | --- |
Regression: | --- | Mount Type: | --- |
Documentation: | --- | CRM: | |
Verified Versions: | Category: | --- | |
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
Cloudforms Team: | --- | Target Upstream Version: | |
Embargoed: |
Description
Nalin Dahyabhai
2010-04-06 17:17:58 UTC
Straightforward upstream patch is: http://git.kernel.org/?p=fs/ext2/e2fsprogs.git;a=commitdiff;h=6b6c27fb8a45f264194d8dd637643d8b4898271a libcom_err: Fix sign-extension problem on 64-bit systems in error_message() On 64-bit systems (or anything with sizeof(long) > sizeof(int)), we sometimes get error codes passed to error_message which have been cast from an (int) to an (unsigned int). This almost always happens if you're using libgssapi_krb5, which returns an error code which is less than 0 but is returned in an (unsigned int). For example, -1765328377L gets cast to 2529638919, which is 0x96c73a07, not 0xffffffff96c73a07, so error_message() fails to find a matching error table. When error_message() then calls the error_table_name() function to get a name to use in the "unknown code" message, it gets a correct value back. This happens because error_table_name() drops most of the higher bits of the parameter it's passed before doing anything else with it (& 077777777f, or & 0xffffff). If we did the same thing in error_message(), we wouldn't have a problem there, either. Problem reported and fixed by: Nalin Dahyabhai Addresses-Sourceforge-Bug: #1809658 Signed-off-by: "Theodore Ts'o" <tytso> --- diff --git a/lib/et/error_message.c b/lib/et/error_message.c index 4e84e35..708dd2f 100644 --- a/lib/et/error_message.c +++ b/lib/et/error_message.c @@ -69,7 +69,7 @@ const char * error_message (errcode_t code) #endif } for (et = _et_list; et; et = et->next) { - if (et->table->base == table_num) { + if ((et->table->base & 0xffffffL) == (table_num & 0xffffffL)) { /* This is the right table */ if (et->table->n_msgs <= offset) goto oops; @@ -77,7 +77,7 @@ const char * error_message (errcode_t code) } } for (et = _et_dynamic_list; et; et = et->next) { - if (et->table->base == table_num) { + if ((et->table->base & 0xffffffL) == (table_num & 0xffffffL)) { /* This is the right table */ if (et->table->n_msgs <= offset) goto oops; Built & tagged in e2fsprogs-1.39-28.el5 An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on therefore solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHBA-2011-1080.html An advisory has been issued which should help the problem described in this bug report. This report is therefore being closed with a resolution of ERRATA. For more information on therefore solution and/or where to find the updated files, please follow the link below. You may reopen this bug report if the solution does not work for you. http://rhn.redhat.com/errata/RHBA-2011-1080.html |