|
Revision tags: release/12.4.0, release/13.1.0 |
|
| #
19b00621 |
| 13-Jan-2022 |
Stefan Eßer <[email protected]> |
qsort.c: prevent undefined behavior
Mark Milliard has detected a case of undefined behavior with the LLVM UBSAN. The mandoc program called qsort with a==NULL and n==0, which is allowed by the POSIX
qsort.c: prevent undefined behavior
Mark Milliard has detected a case of undefined behavior with the LLVM UBSAN. The mandoc program called qsort with a==NULL and n==0, which is allowed by the POSIX standard. The qsort() in FreeBSD did not attempt to perform any accesses using the passed pointer for n==0, but it did add an offset to the pointer value, which is undefined behavior in case of a NULL pointer. This operation has no adverse effects on any achitecture supported by FreeBSD, but could be caught in more strict environments.
After some discussion in the freebsd-current mail list, it was concluded that the case of a==NULL and n!=0 should still be caught by UBSAN (or cause a program abort due to an illegal access) in order to not hide errors in programs incorrectly invoking qsort().
Only the the case of a==NULL and n==0 should be fixed to not perform the undefined operation on a NULL pointer.
This commit makes qsort() exit before reaching the point of potentially undefined behvior for the case n==0, but does not test the value of a, since the result will not depend on whether this pointer is NULL or an actual pointer to an array if n==0.
The issue found by Mark Milliard in the whatis command has been reported to the upstream (OpenBSD) and has already been patched there.
(cherry picked from commit d106f982a54cd299671ccad58bc456138a22ae7b)
show more ...
|
|
Revision tags: release/12.3.0, release/13.0.0 |
|
| #
8dc9d6a7 |
| 18-Feb-2021 |
Alex Richardson <[email protected]> |
libc/qsort: Don't allow interposing recursive calls
This causes problems when using ASAN with a runtime older than 12.0 since the intercept does not expect qsort() to call itself using an interposab
libc/qsort: Don't allow interposing recursive calls
This causes problems when using ASAN with a runtime older than 12.0 since the intercept does not expect qsort() to call itself using an interposable function call. This results in infinite recursion and stack exhaustion when a binary compiled with -fsanitize=address calls qsort. See also https://bugs.llvm.org/show_bug.cgi?id=46832 and https://reviews.llvm.org/D84509 (ASAN runtime patch).
To prevent this problem, this patch uses a static helper function for the actual qsort() implementation. This prevents interposition and allows for direct calls. As a nice side-effect, we can also move the qsort_s checks to the top-level function and out of the recursive calls.
Reviewed By: kib Differential Revision: https://reviews.freebsd.org/D28133
(cherry picked from commit cbcfe28f9d5f975f97b7fb4a0d72bc9780eb0c46)
show more ...
|
|
Revision tags: release/12.2.0, release/11.4.0 |
|
| #
0d2fabfc |
| 20-Jan-2020 |
Edward Tomasz Napierala <[email protected]> |
Add qsort_s(3). Apart from the constraints, it also makes it easier to port software written for Linux variant of qsort_r(3).
Reviewed by: kib, arichardson MFC after: 2 weeks Relnotes: yes Sponsore
Add qsort_s(3). Apart from the constraints, it also makes it easier to port software written for Linux variant of qsort_r(3).
Reviewed by: kib, arichardson MFC after: 2 weeks Relnotes: yes Sponsored by: DARPA Differential Revision: https://reviews.freebsd.org/D23174
show more ...
|
|
Revision tags: release/12.1.0, release/11.3.0, release/12.0.0, release/11.2.0 |
|
| #
66092616 |
| 10-Jun-2018 |
Konstantin Belousov <[email protected]> |
libc qsort(3): stop aliasing.
Qsort swap code aliases the sorted array elements to ints and longs in order to do swap by machine words. Unfortunately this breaks with the full code optimization, e.
libc qsort(3): stop aliasing.
Qsort swap code aliases the sorted array elements to ints and longs in order to do swap by machine words. Unfortunately this breaks with the full code optimization, e.g. LTO.
See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83201 which seems to reference code directly copied from libc/stdlib/qsort.c.
PR: 228780 Reported by: [email protected] Reviewed by: brooks Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D15714
show more ...
|
| #
8a16b7a1 |
| 20-Nov-2017 |
Pedro F. Giffuni <[email protected]> |
General further adoption of SPDX licensing ID tags.
Mainly focus on files that use BSD 3-Clause license.
The Software Package Data Exchange (SPDX) group provides a specification to make it easier f
General further adoption of SPDX licensing ID tags.
Mainly focus on files that use BSD 3-Clause license.
The Software Package Data Exchange (SPDX) group provides a specification to make it easier for automated tools to detect and summarize well known opensource licenses. We are gradually adopting the specification, noting that the tags are considered only advisory and do not, in any way, superceed or replace the license texts.
Special thanks to Wind River for providing access to "The Duke of Highlander" tool: an older (2014) run over FreeBSD tree was useful as a starting point.
show more ...
|
|
Revision tags: release/10.4.0, release/11.1.0 |
|
| #
ca1578f0 |
| 19-May-2017 |
Xin LI <[email protected]> |
The current qsort(3) implementation ignores the sizes of partitions, and always perform recursion on the left partition, then use a tail call to handle the right partition. In the worst case this co
The current qsort(3) implementation ignores the sizes of partitions, and always perform recursion on the left partition, then use a tail call to handle the right partition. In the worst case this could require O(N) levels of recursions.
Reduce the possible recursion level to log2(N) by always recursing on the smaller partition instead.
Obtained from: PostgreSQL 9d6077abf9d6efd992a59f05ef5aba981ea32096
show more ...
|
| #
a3f893fc |
| 19-May-2017 |
Xin LI <[email protected]> |
Use size_t.
Inspired by: OpenBSD src/lib/libc/stdlib/qsort.c,v 1.11
|
|
Revision tags: release/11.0.1, release/11.0.0, release/10.3.0 |
|
| #
f98e0c9d |
| 20-Sep-2015 |
Craig Rodrigues <[email protected]> |
Use ANSI C prototypes. Eliminates -Wold-style-definition warnings.
|
|
Revision tags: release/10.2.0 |
|
| #
2eaea119 |
| 05-Mar-2015 |
Pedro F. Giffuni <[email protected]> |
qsort(3): small style(9) cleanups.
Basically spaces vs. tabs. No functional change.
|
| #
9382fabf |
| 05-Mar-2015 |
Pedro F. Giffuni <[email protected]> |
qsort(3): enhance to handle 32-bit aligned data on 64-bit systems
Implement a small enhancement to the original qsort implementation: If the data is 32 bit aligned we can side-step the long type ver
qsort(3): enhance to handle 32-bit aligned data on 64-bit systems
Implement a small enhancement to the original qsort implementation: If the data is 32 bit aligned we can side-step the long type version and use int instead.
The change brings a modest but significant improvement in 32 bit workloads.
Relnotes: yes
PR: 135718 Taken from: ache
show more ...
|
|
Revision tags: release/10.1.0, release/9.3.0, release/10.0.0, release/9.2.0 |
|
| #
580b4d18 |
| 13-Jun-2013 |
Ed Maste <[email protected]> |
Renumber clauses to reduce diffs to other versions
NetBSD, OpenBSD, and Android's Bionic number the clauses 1 through 3, so follow suit to make comparison easier.
|
|
Revision tags: release/8.4.0, release/9.1.0, release/8.3.0_cvs, release/8.3.0, release/9.0.0, release/7.4.0_cvs, release/8.2.0_cvs, release/7.4.0, release/8.2.0, release/8.1.0_cvs, release/8.1.0, release/7.3.0_cvs, release/7.3.0, release/8.0.0_cvs, release/8.0.0, release/7.2.0_cvs, release/7.2.0, release/7.1.0_cvs, release/7.1.0, release/6.4.0_cvs, release/6.4.0, release/7.0.0_cvs, release/7.0.0, release/6.3.0_cvs, release/6.3.0 |
|
| #
ac48ad2e |
| 14-Jan-2008 |
David Schultz <[email protected]> |
Changing 'r' to a size_t in the previous commit turned quicksort into slowsort for some sequences because different parts of the code used 'r' to store two different things, one of which was signed.
Changing 'r' to a size_t in the previous commit turned quicksort into slowsort for some sequences because different parts of the code used 'r' to store two different things, one of which was signed. Clean things up by splitting 'r' into two variables, and use a more meaningful name.
show more ...
|
| #
badf97cd |
| 13-Jan-2008 |
David Schultz <[email protected]> |
Use size_t to avoid overflow when sorting arrays larger than 2 GB.
PR: 111085 MFC after: 2 weeks
|
|
Revision tags: release/6.2.0_cvs, release/6.2.0 |
|
| #
c879ae35 |
| 09-Jan-2007 |
Warner Losh <[email protected]> |
Per Regents of the University of Calfornia letter, remove advertising clause.
# If I've done so improperly on a file, please let me know.
|
|
Revision tags: release/5.5.0_cvs, release/5.5.0, release/6.1.0_cvs, release/6.1.0, release/6.0.0_cvs, release/6.0.0, release/5.4.0_cvs, release/5.4.0, release/4.11.0_cvs, release/4.11.0, release/5.3.0_cvs, release/5.3.0, release/4.10.0_cvs, release/4.10.0, release/5.2.1_cvs, release/5.2.1, release/5.2.0_cvs, release/5.2.0, release/4.9.0_cvs, release/4.9.0, release/5.1.0_cvs, release/5.1.0, release/4.8.0_cvs, release/4.8.0, release/5.0.0_cvs, release/5.0.0, release/4.7.0_cvs |
|
| #
eca67d51 |
| 10-Sep-2002 |
Garrett Wollman <[email protected]> |
Implement C99's _Exit() interface. Implement a version of qsort that provides a thunk to the comparison function.
Update manual pages.
|
|
Revision tags: release/4.6.2_cvs, release/4.6.2, release/4.6.1, release/4.6.0_cvs |
|
| #
333fc21e |
| 22-Mar-2002 |
David E. O'Brien <[email protected]> |
Fix the style of the SCM ID's. I believe have made all of libc .c's as consistent as possible.
|
| #
c05ac53b |
| 21-Mar-2002 |
David E. O'Brien <[email protected]> |
Remove __P() usage.
|
| #
8fb3f3f6 |
| 21-Mar-2002 |
David E. O'Brien <[email protected]> |
Remove 'register' keyword.
|
|
Revision tags: release/4.5.0_cvs, release/4.4.0_cvs, release/4.3.0_cvs, release/4.3.0, release/4.2.0, release/4.1.1_cvs, release/4.1.0, release/3.5.0_cvs, release/4.0.0_cvs, release/3.4.0_cvs, release/3.3.0_cvs |
|
| #
7f3dea24 |
| 28-Aug-1999 |
Peter Wemm <[email protected]> |
$Id$ -> $FreeBSD$
|
|
Revision tags: release/3.2.0, release/3.1.0, release/3.0.0, release/2.2.8, release/2.2.7, release/2.2.6, release/2.2.5_cvs, release/2.2.2_cvs, release/2.2.1_cvs, release/2.2.0, release/2.1.7_cvs |
|
| #
7e546392 |
| 22-Feb-1997 |
Peter Wemm <[email protected]> |
Revert $FreeBSD$ to $Id$
|
|
Revision tags: release/2.1.6_cvs, release/2.1.6.1 |
|
| #
1130b656 |
| 14-Jan-1997 |
Jordan K. Hubbard <[email protected]> |
Make the long-awaited change from $Id$ to $FreeBSD$
This will make a number of things easier in the future, as well as (finally!) avoiding the Id-smashing problem which has plagued developers for so
Make the long-awaited change from $Id$ to $FreeBSD$
This will make a number of things easier in the future, as well as (finally!) avoiding the Id-smashing problem which has plagued developers for so long.
Boy, I'm glad we're not using sup anymore. This update would have been insane otherwise.
show more ...
|
|
Revision tags: release/2.1.5_cvs |
|
| #
09a8dfa2 |
| 31-Aug-1996 |
Bruce Evans <[email protected]> |
Don't depend in the kernel on the gcc feature of doing arithmetic on pointers of type `void *'. Warn about this in future.
|
| #
8a459911 |
| 19-Apr-1996 |
Bruce Evans <[email protected]> |
Don't include <sys/types.h> when it isn't used.
This commit covers most of the ANSI library functions. Many others only need <sys/types.h> because they use u_xxx.
|
|
Revision tags: release/2.1.0_cvs |
|
| #
43288965 |
| 26-Dec-1995 |
Bruce Evans <[email protected]> |
Added prototypes.
|
|
Revision tags: release/2.0.5_cvs |
|
| #
6c06b4e2 |
| 30-May-1995 |
Rodney W. Grimes <[email protected]> |
Remove trailing whitespace.
|