Bug 1641981
Summary: | glibc: Incorrect analysis of x86 CPU properties selects wrong string functions | ||
---|---|---|---|
Product: | Red Hat Enterprise Linux 7 | Reporter: | Florian Weimer <fweimer> |
Component: | glibc | Assignee: | Florian Weimer <fweimer> |
Status: | CLOSED ERRATA | QA Contact: | Carlos O'Donell <codonell> |
Severity: | medium | Docs Contact: | |
Priority: | high | ||
Version: | 7.7 | CC: | ashankar, codonell, dj, fweimer, mnewsome, pfrankli, skolosov |
Target Milestone: | pre-dev-freeze | Keywords: | Patch |
Target Release: | --- | ||
Hardware: | x86_64 | ||
OS: | Unspecified | ||
Whiteboard: | |||
Fixed In Version: | glibc-2.17-282.el7 | Doc Type: | No Doc Update |
Doc Text: | Story Points: | --- | |
Clone Of: | 1641980 | Environment: | |
Last Closed: | 2019-08-06 12:49:05 UTC | Type: | Bug |
Regression: | --- | Mount Type: | --- |
Documentation: | --- | CRM: | |
Verified Versions: | Category: | --- | |
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
Cloudforms Team: | --- | Target Upstream Version: | |
Embargoed: | |||
Bug Depends On: | 1641980, 1641982 | ||
Bug Blocks: | 1660844 |
Description
Florian Weimer
2018-10-23 10:00:52 UTC
Upstream commit: commit c3d8dc45c9df199b8334599a6cbd98c9950dba62 Author: Adhemerval Zanella <adhemerval.zanella> Date: Thu Oct 11 15:18:40 2018 -0300 x86: Fix Haswell strong flags (BZ#23709) Th commit 'Disable TSX on some Haswell processors.' (2702856bf4) changed the default flags for Haswell models. Previously, new models were handled by the default switch path, which assumed a Core i3/i5/i7 if AVX is available. After the patch, Haswell models (0x3f, 0x3c, 0x45, 0x46) do not set the flags Fast_Rep_String, Fast_Unaligned_Load, Fast_Unaligned_Copy, and Prefer_PMINUB_for_stringop (only the TSX one). This patch fixes it by disentangle the TSX flag handling from the memory optimization ones. The strstr case cited on patch now selects the __strstr_sse2_unaligned as expected for the Haswell cpu. Checked on x86_64-linux-gnu. [BZ #23709] * sysdeps/x86/cpu-features.c (init_cpu_features): Set TSX bits independently of other flags. With glibc-2.17-260.el7_6.3.x86_64, I see: (gdb) print/x _rtld_global_ro._dl_x86_cpu_features $2 = {kind = 0x1, max_cpuid = 0xf, cpuid = {{eax = 0x306f2, ebx = 0x3100800, ecx = 0x7ffefbff, edx = 0xbfebfbff}, {eax = 0x0, ebx = 0x37ab, ecx = 0x0, edx = 0x9c000000}, {eax = 0x0, ebx = 0x0, ecx = 0x0, edx = 0x0}}, family = 0x6, model = 0x3f, xsave_state_size = 0x380, feature = {0xcc8}} With (upcoming) glibc-2.17-282.el7.x86_64, I get instead: (gdb) print/x _rtld_global_ro._dl_x86_cpu_features $1 = {kind = 0x1, max_cpuid = 0xf, cpuid = {{eax = 0x306f2, ebx = 0x5100800, ecx = 0x7ffefbff, edx = 0xbfebfbff}, {eax = 0x0, ebx = 0x37ab, ecx = 0x0, edx = 0x9c000000}, {eax = 0x0, ebx = 0x0, ecx = 0x0, edx = 0x0}}, family = 0x6, model = 0x3f, xsave_state_size = 0x380, feature = {0xcfb}} 0xcc8 ^ 0xcfb == 0x33, and the new bits correspond to: #define bit_Fast_Rep_String (1 << 0) #define bit_Fast_Copy_Backward (1 << 1) #define bit_Fast_Unaligned_Load (1 << 4) #define bit_Prefer_PMINUB_for_stringop (1 << 5) This corresponds to the newly reached switch case in init_cpu_features in sysdeps/x86/cpu-features.c: cpu_features->feature[index_Fast_Rep_String] |= (bit_Fast_Rep_String | bit_Fast_Copy_Backward | bit_Fast_Unaligned_Load | bit_Prefer_PMINUB_for_stringop); I do not know if the verification method from bug 1641982 comment 6 will work for Red Hat Enterprise Linux 7 because strstr selects string functions differently in the first place, which is likely why this regression was only found during internal code review and not reported by customers yet. Verified, based on https://bugzilla.redhat.com/show_bug.cgi?id=1641981#c4. In glibc-2.17-282.el7 flags: bit_Fast_Rep_String, bit_Fast_Copy_Backward, bit_Fast_Unaligned_Load, bit_Prefer_PMINUB_for_stringop were properly setup on Haswell CPU. Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHSA-2019:2118 |