Bug 678569

Summary: SDL_BlitCopyOverlap assumes memcpy operates in order while SSE3 version operates from back to front
Product: Red Hat Enterprise Linux 6 Reporter: Petr Pisar <ppisar>
Component: SDLAssignee: Petr Pisar <ppisar>
Status: CLOSED ERRATA QA Contact: Lukáš Zachar <lzachar>
Severity: medium Docs Contact:
Priority: low    
Version: 6.1CC: ovasik, ppisar, psplicha, twoerner
Target Milestone: rcKeywords: Patch
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: SDL-1.2.14-3.el6 Doc Type: Bug Fix
Doc Text:
Cause Calling SDL_BlitSurface() on overlaping rectangles while running on SSE3 optimized standard C library. Consequence Rectangle bitmaps content is corrupted what produces garbage on the screen. Fix Internal SDL_BlitCopyOverlap() function has been fixed to copy bitmaps between overlapping areas correctly. Result SDL_BlitSurface() function performs correctly even if standard C library does not implement memcpy() safely for operation on overlapping memory areas.
Story Points: ---
Clone Of: 669844 Environment:
Last Closed: 2012-04-03 15:20:31 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:
Attachments:
Description Flags
Fix from upstream
none
Reproducer none

Description Petr Pisar 2011-02-18 13:25:51 UTC
+++ This bug was initially created as a clone of Bug #669844 +++
[...]
Additional info:
I guess simple switching SDL_memcpy to memmove would fix the problem even tough that would add one extra branch for each line that is copied. But in end switching both branches to use simple memmove would be big gain as C library would have CPU specific optimizations that are missing from SDL.

[...]

Fix provided by upstream, SDL version in RHEL-6 is affected and fixable. Reproduction depends on glibc version (memcpy() implementation), CPU and memory mapping.

Comment 1 Petr Pisar 2011-02-18 13:27:35 UTC
Created attachment 479499 [details]
Fix from upstream

Comment 2 Petr Pisar 2011-02-18 13:28:31 UTC
Created attachment 479500 [details]
Reproducer

Requires new glibc, SSE3 CPU, and little of luck.

Comment 3 Petr Pisar 2011-02-18 13:39:50 UTC
Current glibc-2.12-1.19.el6.x86_64 does not provided affected memcpy(), so the SDL bug does not exhibit now.

Comment 4 RHEL Program Management 2011-07-05 23:41:59 UTC
This request was evaluated by Red Hat Product Management for
inclusion in the current release of Red Hat Enterprise Linux.
Because the affected component is not scheduled to be updated
in the current release, Red Hat is unfortunately unable to
address this request at this time. Red Hat invites you to
ask your support representative to propose this request, if
appropriate and relevant, in the next release of Red Hat
Enterprise Linux. If you would like it considered as an
exception in the current release, please ask your support
representative.

Comment 9 Petr Pisar 2012-01-10 17:16:48 UTC
    Technical note added. If any revisions are required, please edit the "Technical Notes" field
    accordingly. All revisions will be proofread by the Engineering Content Services team.
    
    New Contents:
Cause
    Calling SDL_BlitSurface() on overlaping rectangles while
    running on SSE3 optimized standard C library.
Consequence
    Rectangle bitmaps content is corrupted what produces
    garbage on the screen.
Fix
    Internal SDL_BlitCopyOverlap() function has been fixed to
    copy bitmaps between overlapping areas correctly.
Result
    SDL_BlitSurface() function performs correctly even if
    standard C library does not implement memcpy() safely for
    operation on overlapping memory areas.

Comment 11 errata-xmlrpc 2012-04-03 15:20:31 UTC
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.

http://rhn.redhat.com/errata/RHBA-2012-0446.html