Patch Name: PHKL_28122 Patch Description: s700_800 11.11 signals,threads enhancement,Psets Enablement Creation Date: 02/12/19 Post Date: 03/02/03 Hardware Platforms - OS Releases: s700: 11.11 s800: 11.11 Products: N/A Filesets: OS-Core.CORE2-KRN,fr=B.11.11,fa=HP-UX_B.11.11_32,v=HP OS-Core.CORE2-KRN,fr=B.11.11,fa=HP-UX_B.11.11_64,v=HP Automatic Reboot?: Yes Status: General Release Critical: Yes PHKL_28122: PANIC HANG PHKL_25729: HANG PHKL_24256: OTHER Hung, Unkillable Process PHKL_26241: ABORT Category Tags: defect_repair enhancement general_release critical panic halts_system manual_dependencies Path Name: /hp-ux_patches/s700_800/11.X/PHKL_28122 Symptoms: PHKL_28122: ( SR:8606250555 CR:JAGae16930 ) During HP internal review, an inconsistent synchronization of a signals' field was found. The problem could lead to a system panic or hang. However, the problem was quite rare. To date, this problem has not been reported by any customer nor HP internal testing facility. PHKL_25729: ( SR:8606213548 CR:JAGad82740 ) If an application uses thread cancellation for threads synchronization, an intermittent hang may occur. This happens when the thread fails to be cancelled, even when cancellation is enabled. ( SR:8606216254 CR:JAGad85424 ) High comsumption of CPU resources can result in an apparent system hang. This occurs with applications that use a large number of threads per process. PHKL_24567: ( SR:8606200799 CR:JAGad69975 ) This patch is a member of a set of patches needed to enable the HP-UX Processor Sets product (PROCSETS). When PROCSETS product is installed, it will install the full set of required patches for that product, including this patch. If the HP-UX Processor Sets product is not installed, this change will have no impact on your system. PHKL_24256: ( SR:8606159451 CR:JAGad28779 ) Duplicate ( SR:8606103740 CR:JAGab70789 ) A multi-threaded process being executed over NFS can become hung and unkillable while performing either a fork, core, setrlimit, SIGSTOP, or debugger operations. This can happen with mutiple threads in different processes competing for the same resource when one thread is stopped. PHKL_23280: ( SR:8606162688 CR:JAGad32004 ) A multithreaded process may not always perform the desired signal handler action if the system V signal(2) interface is used or if the SA_RESETHAND flag is set with the other signalling interfaces. This could occur when the process must handle more than one instance of the same signal in parallel. Similar problems with signal handling could occur if the user calls sigaction() while the signal is being processed. The most likely results of handling the action incorrectly would be for the process to be terminated or for a user specified action to be performed more than once before the signal action is reset to SIG_DFL. PHKL_26241: ( SR:8606233570 CR:JAGae02793 ) The signal function sigtimedwait() incorrectly returns EINVAL when the value of the timespec structure field tv_sec is 0 and field tv_nsec lies in the range 990,000,001 to 999,999,999, inclusive. This may cause an application to abort. Defect Description: PHKL_28122: ( SR:8606250555 CR:JAGae16930 ) A kernel data structure used by signals is updated using incorrect synchronization. Resolution: Change synchronization to provide correct protection. PHKL_25729: ( SR:8606213548 CR:JAGad82740 ) SIGCANCEL is used by the pthreads library to terminate interruptible system calls while inside a sleep. The SIGCANCEL signal can be lost if it is received while the thread is handling a trap. This results in a thread hang. Resolution: The solution to losing cancellations is to check if the process is in the trap path when searching for pending signals and a SIGCANCEL is found. If so, the SIGCANCEL is deffered and handled in the sleep path. This ensures that the signal will not be lost and thread cancellation will proceed. ( SR:8606216254 CR:JAGad85424 ) All non-running threads are searched to see if they can handle a process directed signal. However, if the signal is blocked by all the threads of a process, the signal cannot be delivered to a thread and must be left pending at the process level. This causes repeated attempts to deliver the signal since it is possible that a thread will eventually accept the signal. The POSIX standards require the signal to be delivered. Resolution: The solution is to reduce the number of times the entire list of threads is searched by keeping a hint that a previous search has found all threads having that signal masked, and not repeating the search. This avoids unnecessary and time consuming searches for a thread to handle a signal when a candidate is not available. PHKL_24567: ( SR:8606200799 CR:JAGad69975 ) This patch contains minor enhancements required to support the HP-UX Processor Sets product. Resolution: Enhancements added to access per processor set run queue of posix realtime scheduler when Processor Sets product is enabled. PHKL_24256: ( SR:8606159451 CR:JAGad28779 ) Duplicate ( SR:8606103740 CR:JAGab70789 ) A thread acquires a lock and then sleeps interruptibly. The interruptible sleep permits the thread to be stopped. Any other thread attempting to acquire this lock will sleep uninterruptibly until the lock is available. This uninterruptible thread is also unkillable. This introduces a deadlock potential in multi-threaded processes: when a thread holding the lock, a thread desiring the lock, and a third thread doing one of fork, setrlimit, core, SIGSTOP, or debugger operations, all occur at the same time in the same process, the deadlock is reached. The only way to resolve the deadlock is to reboot the system. A similar situation can occur when threads in different processes are competing for the same NFS resource and the thread that owns that resource is stopped via a signal, a debugger, or a ctrl-Z. This patch is part of a set of five patches (PHKL_24253, PHKL_24254,PHKL_24255,PHKL_24256,PHKL_24257) that enable P_NOSTOP, a new feature that prevents a process from being unkillable. Each patch is independently installable. Without all five installed, P_NOSTOP will be unavailable. In order to prevent the process executed over NFS from becoming unkillable, NFS must use the P_NOSTOP feature. Usage of this feature was added to PHNE_23502. Resolution: If a thread acquires a lock and then sleeps interruptibly, it is not permitted to be stopped if P_NOSTOP is set. This prevents this thread from becoming unkillable and prevents the deadlock. PHKL_23280: ( SR:8606162688 CR:JAGad32004 ) The possibility of the wrong signal action being executed results from a race condition that occurs between issig() and psig(). This race condition is caused by checking the signal's action in issig(), using that value to determine if the signal needs to be processed by psig(), and then releasing the thread and scheduler locks before issig() returns. Upon returning from issig(), psig() is called and checks the signal's action again. This leaves a window of time that allows for the signal's action to be changed between when issig() determines the signal should be handled by psig() and when psig() checks what action should be performed. The result is that the action could be SIG_DFL, but psig() won't know how to perform the default action for that signal. Resolution: psig() was modified so that it would be able to handle SIGIO in addition to the six signals that have a default action of ignore. PHKL_26241: ( SR:8606233570 CR:JAGae02793 ) tv_nsec values in the range 990,000,001 to 999,999,999 cause an overflow into the tv_sec field when internally rounded up to whole scheduler ticks (10,000,000 nsec). This causes code in sigtimedwait() to produce an unexpected negative value for tv_sec on a subsequent subtraction and return EINVAL. Resolution: Change conditional code to handle internal tv_sec if less than zero. Enhancement: No (superseded patches contained enhancements) PHKL_28122: Enhancements were delivered in a patch this one has superseded. Please review the Defect Description text for more information. SR: 8606103740 8606159451 8606162688 8606200799 8606213548 8606216254 8606233570 8606250555 Patch Files: OS-Core.CORE2-KRN,fr=B.11.11,fa=HP-UX_B.11.11_32,v=HP: /usr/conf/lib/libpm.a(kern_sig.o) /usr/conf/lib/libpm.a(pm_signal.o) OS-Core.CORE2-KRN,fr=B.11.11,fa=HP-UX_B.11.11_64,v=HP: /usr/conf/lib/libpm.a(kern_sig.o) /usr/conf/lib/libpm.a(pm_signal.o) what(1) Output: OS-Core.CORE2-KRN,fr=B.11.11,fa=HP-UX_B.11.11_32,v=HP: /usr/conf/lib/libpm.a(kern_sig.o): kern_sig.c $Date: 2002/10/24 15:35:13 $Revision: r11 .11/2 PATCH_11.11 (PHKL_28122) /usr/conf/lib/libpm.a(pm_signal.o): pm_signal.c $Date: 2002/10/24 15:36:06 $Revision: r1 1.11/5 PATCH_11.11 (PHKL_28122) OS-Core.CORE2-KRN,fr=B.11.11,fa=HP-UX_B.11.11_64,v=HP: /usr/conf/lib/libpm.a(kern_sig.o): kern_sig.c $Date: 2002/10/24 15:35:13 $Revision: r11 .11/2 PATCH_11.11 (PHKL_28122) /usr/conf/lib/libpm.a(pm_signal.o): pm_signal.c $Date: 2002/10/24 15:36:06 $Revision: r1 1.11/5 PATCH_11.11 (PHKL_28122) cksum(1) Output: OS-Core.CORE2-KRN,fr=B.11.11,fa=HP-UX_B.11.11_32,v=HP: 2532070081 17712 /usr/conf/lib/libpm.a(kern_sig.o) 3451393676 28008 /usr/conf/lib/libpm.a(pm_signal.o) OS-Core.CORE2-KRN,fr=B.11.11,fa=HP-UX_B.11.11_64,v=HP: 2018516825 48072 /usr/conf/lib/libpm.a(kern_sig.o) 920977624 61832 /usr/conf/lib/libpm.a(pm_signal.o) Patch Conflicts: None Patch Dependencies: s700: 11.11: PHKL_25728 s800: 11.11: PHKL_25728 Hardware Dependencies: None Other Dependencies: PHKL_24256: If NFS is installed on the system, all five patches (PHNE_23502, PHKL_24253, PHKL_24254,PHKL_24255, PHKL_24256, PHKL_24257) are required to resolve the process hang/deadlock due to unkillable processes executed over NFS. However, if NFS is not in use, none of these patches are required. Supersedes: PHKL_26241 PHKL_25729 PHKL_24567 PHKL_24256 PHKL_23280 Equivalent Patches: None Patch Package Size: 190 KBytes Installation Instructions: Please review all instructions and the Hewlett-Packard SupportLine User Guide or your Hewlett-Packard support terms and conditions for precautions, scope of license, restrictions, and, limitation of liability and warranties, before installing this patch. ------------------------------------------------------------ 1. Back up your system before installing a patch. 2. Login as root. 3. Copy the patch to the /tmp directory. 4. Move to the /tmp directory and unshar the patch: cd /tmp sh PHKL_28122 5. Run swinstall to install the patch: swinstall -x autoreboot=true -x patch_match_target=true \ -s /tmp/PHKL_28122.depot By default swinstall will archive the original software in /var/adm/sw/save/PHKL_28122. If you do not wish to retain a copy of the original software, include the patch_save_files option in the swinstall command above: -x patch_save_files=false WARNING: If patch_save_files is false when a patch is installed, the patch cannot be deinstalled. Please be careful when using this feature. For future reference, the contents of the PHKL_28122.text file is available in the product readme: swlist -l product -a readme -d @ /tmp/PHKL_28122.depot To put this patch on a magnetic tape and install from the tape drive, use the command: dd if=/tmp/PHKL_28122.depot of=/dev/rmt/0m bs=2k Special Installation Instructions: None