Home
Developer Resources
Technical Articles

QNX Technical Articles

QNX® Software Development Platform 6.5.0 SP1 x86 Kernel & Libc Patch (Patch ID 650SP1-51): Release Notes

Date of this edition: July 10, 2014

Target OS: This patch is compatible with targets that are running QNX® Neutrino® 6.5.0 SP1.

Host OS: In order to apply this patch, you must have installed the QNX Software Development Platform 6.5.0 with Service Pack 1:

  • as a self-hosted QNX Neutrino development system
  • or on one of the following development hosts:
    • Microsoft Windows 7 Professional 32- and 64-bit, Vista Business 32- and 64-bit, XP Professional SP3, or 2000 SP4
    • Linux Red Hat Enterprise Linux 5.4 Desktop 32- and 64-bit, Red Hat Fedora 12, Ubuntu Workstation 9.10, 11.04, and 12.04 32- and 64-bit, or openSUSE 11.2

You must also have installed the applypatch Patch (Patch ID 3792).


Note: If you've already installed the x86 Kernel & Libc Patch (Patch ID 650SP1-50), we recommend that you uninstall it and install this patch instead.

For the most up-to-date version of these notes, log in to your myQNX account, and then go to the Download area of www.qnx.com.


Contents...

Throughout this document, you may see reference numbers associated with particular issues, changes, etc. When corresponding with our Technical Support staff about a given issue, please quote the relevant reference number. You might also find the reference numbers useful for tracking issues as they become fixed.

What's in this patch?

This patch provides fixes for a number of issues found in libc and the kernel. It updates the following files:

  • target/qnx6/x86/lib/libc.so
  • target/qnx6/x86/lib/libcS.a
  • target/qnx6/x86/lib/libc.a
  • target/qnx6/x86/lib/libc.so.3
  • target/qnx6/x86/usr/sbin/tracelogger
  • target/qnx6/x86/boot/sys/procnto-instr
  • target/qnx6/x86/boot/sys/libmod_aps.a
  • target/qnx6/x86/boot/sys/procnto-smp-instr
  • target/qnx6/x86/boot/sys/procnto
  • target/qnx6/x86/boot/sys/procnto-smp

List of fixes

The problems fixed in this patch include the following:

Change Ref #
Fixed an issue with spinlock initialization and also made a correction so that all platforms use CLOCKCYCLES_INCR_BIT. J162702
Fixed an issue with resched_ppg() on SMP APS variants so that it checks the active runmask before selecting which thread to run. J166553
Guarded against a race condition where two threads access the same executable page at almost the same time. J169809
Fixed an issue with available virtual address range on ARM. J170095
Fixed a scenario where a deadlock could occur due to a race between fclose() and cancelling a thread doing fflush() on the same file. J171130
Corrected an “out of critical budget” test for APS. J172021
Fixed a case where debugging signals could cause the debugging session to stop halting at breakpoints. J172459
Fixed a race condition between two open() requests. J172919
Added checks to ensure that the TimerTimeout() flags are maintained across multiple lock mutex attempts. J173200
Fixed an issue where killing a process group didn't necessarily kill all processes in the group. J173537
Fixed a race condition where NTO_DEBUG_GET_FPREG or NTO_DEBUG_SET_FPREG could cause a kernel crash on SMP targets. J173646
Fixed an issue where an interrupted MsgReply() could cause a following MsgRead() to not work. J174186
Added error checking and correction in the case of a memory-mapped file page initialization error. J174239
Fixed a potential race condition in iofunc_attr_unlock() that could cause multithreaded resource manager threads to stay mutex-blocked forever. J174245
Negative values in _SYS_SUB_GET and _SYS_SUB_SET messages are now properly handled. J174343
The access() function now correctly calls close() when an error occurs. J175160
Fixed an issue where cached mappings were set up for non-RAM paddrs. J177204
Prevent a crash due to vfork'd child termination during loading process. J178320
Added additional alignment checks to address a potential blocking issue in posix_memalign(). J184371
Added additional alignment checks to address a potential blocking issue in posix_memalign(). J184784
Fixed a race condition in iofunc_attr_lock() and iofunc_attr_unlock(). J184801
Guarded against a race condition where two threads access the same executable page at almost the same time. J185572
Fixes in white-space directives handling by sscanf(). J186672
Updated SSP cookie generation and code layout support. J188478
Fixed a race condition between proc_pathmgr_read() and updates to the mount directory. J193115
Fixed a race condition in iofunc_attr_lock() and iofunc_attr_unlock(). J198167
Fixes in white-space directives handling by sscanf(). J198308
Guarded against race condition where two threads access the same executable page at almost the same time. J198523
Fixed an off-by-one error on freeing threadname storage. Fixed bad thread names issues. J201177
Fixed race conditions between freeing a process and obtaining a lock on it. J201202
Fixed race conditions between freeing a process and obtaining a lock on it. J202141
Fixes to ensure that error paths in spawn/fork processing don't MsgError() a client process twice. J202159
Fixed a case where shared library load events weren't always emitted. J203028
Fixed an issue in MsgReceive() where there was a possibility of attempting a transfer from a client thread sender that already had a page fault pulse in flight. J378367
Replaced a read-write lock with a mutex in proc_wlock_adp() so that priority is inherited when a higher priority client thread blocks on the lock. J382440
A server thread no longer loses its priority boost when it unlocks a mutex that it acquired before the priority boost. J382708
Fixed an SMP race condition between a long and a short message of equal priority on the same channel that could happen if both were preempted. J382718
The pthread_mutex_timedlock() function's behavior is now compliant with POSIX. J382795
Fixed an issue in recomp() with search patterns. J382900
Fixed an issue where a .bss in a separate LOAD segment caused a crash in ldd on binary load. J383076
Fixed an issue where a client thread was unexpectedly unblocked when an unblock pulse was received. J383419
Fixed a case where posix_memalign() failed to return a properly aligned pointer. J383579
Optimized tzset() by halving the number of confstr() calls. J383747
Added protection to prevent libc timezone functions from causing heap corruption / segfault. J384410
Fixed a race condition between threads in a terminating process on an NVIDIA Tegra3. J384803
The libmod_aps module from a non-instrumented variant now works correctly with the instrumented kernel. J423322
Consolidated transitive priority inheritance. J425798
Added a write memory barrier at the end of the clock interrupt handler to prevent a kernel crash. J426139
Fixed issue with terminating a process via the IDE. J447220
Prevented the use of an already freed connection structure for rcvinfo. J448094
The ARMLE-v7 smp kernel now allows a power callout. J468665
Fixed a race condition between proc_pathmgr_read() and updates to the mount directory. J492276
Addressed the case of priority inversion with a single-threaded resource manager REPLY-blocked on another resource manager. J492855
Fixed a scenario where a double reply on the same message from different threads on different cores was causing a kernel crash. J500861
Prevented times() from crashing if sysconf() returns -1. It may do so if it gets interrupted by a signal. J520572
Fixed the return values for _smp_cmpxchg() and _smp_xchg() to be unsigned. J523623
Fixed memory leaks detected by librcheck on processes. J532166
Optimized the performance of mmap() with MAP_NOINIT. J545809
Performance improvement: write-combining for SHMEM_LAZYWRITE using PAT for x86. J545860
Login: only 8 characters of the password were being validated. We now provide more current options for password hashing. Note that changes to crypt() to support newer encryption algorithms require any utilities/services using crypt() to link against liblogin. J545865
Fixed a scenario in APS where a lower-priority thread could continue running after a higher-priority thread became ready. J550561
Add a missing unlock operation to the error return path for DCMD_PROC_MAPDEBUG. J576235
Prevented a timeout during low memory testing. J600166
Cleaned up a mutex in the failure case to prevent ENOMEM on fork() calls. J608009
Round-robin scheduling now works correctly when you start procnto with the -p option. J692810

Known issues

None currently known.

Technical support

If you have any questions, comments, or problems with a QNX product, please contact Technical Support. For more information, see the How to Get Help chapter of the Welcome to the QNX Software Development Platform guide or visit our website, www.qnx.com.