 |
» |
|
|
 |
 |
 |
|
|
 |
|
Patch Name: PHKL_23407
Patch Description: s700_800 11.00 signal,threads,spinlock,scheduler,IDS,q3p
Creation Date: 01/02/16
Post Date: 01/04/12
Hardware Platforms - OS Releases:
s700: 11.00
s800: 11.00
Products: N/A
Filesets:
OS-Core.CORE2-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32,v=HP
OS-Core.CORE2-KRN,fr=B.11.00,fa=HP-UX_B.11.00_64,v=HP
Automatic Reboot?: Yes
Status: General Superseded
Critical:
Yes
PHKL_23407: OTHER
Hung, Unkillable process
PHKL_20625: PANIC
Category Tags:
defect_repair hardware_enablement enhancement
general_release critical panic
Path Name: /hp-ux_patches/s700_800/11.X/PHKL_23407
Symptoms:
PHKL_23407:
(SR: 8606103740 CR: JAGab70789)
(SR: 8606159451 CR: JAGad28779)
A multi-threaded process being executed over NFS can become
hung and unkillable while performing either a fork, core,
setrlimit, SIGSTOP, or debugger operations.
PHKL_23001:
( SR: 8606161075 CR: JAGad30393 )
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_22568:
( SR: 8606163813 CR: JAGad33117 )
A multithreaded private third quadrant process will core
dump.
PHKL_22145:
( SR: 8606141357 CR: JAGad10718 )
Multi-threaded processes may not respond to SIGKILL,
SIGSTOP, or SIGCONT making the process "unkillable".
PHKL_21830:
( SR: 8606127468 CR: JAGac77753 )
User can incorrectly create a thread and bind it to a
deallocated processor.
Note that this defect can only be seen when processors
have been deallocated explicitly through administrator
intervention.
PHKL_21348:
( SR: 8606124297 CR: JAGac39680 )
When an application specifies signal(SIGCHLD,SIG_IGN)
and forks a child, it still gets interrupted when
the child exits. This premature interruption also occurs
in SIGCONT/SIG_IGN.
( SR: 8606132611 CR: JAGad01760)
The Praesidium IDS/9000 product requires this patch in order
to run. This change has no impact on systems without the
Praesidium IDS/9000 product installed and enabled.
PHKL_20942:
( SR: 8606112164 DTS: JAGab84450 )
Enhancement: Performance changes for corner case in RTSCHED
scheduling. This patch has no impact on most systems.
PHKL_20625:
( SR: 8606110344 CR: JAGab83048 )
UP system panics with Data Page Fault:
panic+0x14
report_trap_or_int_and_panic+0x4c
trap+0xea8
$RDB_trap_patch+0x38
ksw_remove_from_proc+0x5c
sigsuspend+0x1c0
syscall+0x1c8
$syscallrtn+0x0
PHKL_19930:
( SR: 8606103530 DTS: JAGab70391 )
Delivery of signals to processes with many (1000's) threads
is very slow and significantly reduces system throughput.
PHKL_19531:
( SR: 1653296996 DTS: JAGaa94126 )
Immediate return from delays with time interval requests in
excess of 2^31-1 seconds. The limit is now 2^32-1 for
32-bit systems, and 2^64-1 64-bit systems.
Defect Description:
PHKL_23407:
(SR: 8606103740 CR: JAGab70789)
(SR: 8606159451 CR: JAGad28779)
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
uninterruptably until the lock is available. This
uninterruptable 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 optionations, 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.
This patch is part of a set of four patches (PHKL_23406,
PHKL_23407,PHKL_23408,PHKL_23409) that enable P_NOSTOP, a
new feature that prevents a process from being unkillable.
Each patch is independantly installable. Without all four
installed, the P_NOSTOP feature will be unavailable.
In order to prevent the process executed over NFS from
becoming unkillable, NFS must use the P_NOSTOP feature. An
NFS patch using P_NOSTOP, PHNE_23249, will be released in
Spring of 2001.
Resolution:
If a thread acquires a lock and then sleeps interruptably,
it is not permitted to be stopped if P_NOSTOP is set. This
prevents this thread from becoming unkillable and prevents
the deadlock.
PHKL_23001:
( SR: 8606161075 CR: JAGad30393 )
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, while holding no locks.
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. This results in two
possible error cases: that the action will be SIG_DFL, but
psig() won't know how to perform the default action for
that signal, or that a user specified action will be used
when the action should have been reset to SIG_DFL.
Resolution:
When the system V signal(2) interface or the standard
interface with the SA_RESETHAND flag set are used, the
signal action was checked a second time in psig() after the
scheduler lock is obtained. After this check is made, if
the action is SIG_DFL, then we know the race condition
has occured and psig() will then perform the default action
for that signal. psig() was also modified so that it would
be able to handle SIGIO in addition to the six signals that
have a default action of ignore.
PHKL_22568:
( SR: 8606163813 CR: JAGad33117 )
If a private third quadrant process creates another thread,
the kernel does not initialize sr6 (the space register that
controls the third quadrant address space) to the proper
value for that thread. Any access by that thread to an
address in the third quadrant will lead to a segmentation
violation.
Resolution:
The kernel procedure which initializes registers for new
threads has been modified to set sr6 properly (i.e. the
same value that is in sr5, which is the users private
address space).
PHKL_22145:
( SR: 8606141357 CR: JAGad10781 )
The process does not respond to the signals SIGKILL,
SIGSTOP, and SIGCONT as these will be directed
to the first thread of the process without checking
to see if that thread is a zombie thread. This selection
is made in the find_first_eligible_thread function. If
it's a zombie it does nothing to handle the signal.
Note that this does not affect other signals as the
threads they are passed to are selected in a different
manner.
Resolution:
Change find_first_eligible_thread so that it passes
the signals noted above to the first non-zombie
thread rather than automatically choosing the first
thread.
PHKL_21830:
( SR: 8606127468 CR: JAGac77753 )
Procedure thread_create() does not check if the processor is
currently deallocated.
Resolution:
Change thread_create() to fail and set errno to EINVAL if a
thread is set to bound to a deallocated processor.
PHKL_21348:
( SR: 8606124297 CR: JAGac39680 )
Parent issues a signal(SIGCHLD,SIG_IGN) to prevent
exiting children from creating zombie processes.
Before 11.00, when the child exits, the parent is
woken up by the signal. If SIGCHLD/SIG_IGN is set,
it reaps the zombies, discards the child, ignores
the signal and goes back to sleep. In 11.00, thread
house cleaning is added in the sigsuspend() and
sigpause() paths such that the parent is not put
back to sleep after waking up, resulting in the
premature interruption of the parent.
Resolution:
In 11.00, since the reaping of zombies is done by the
child during exit, there is no need for the parent to be
woken up when a child exits. Therefore SIGCHLD/SIG_IGN
can be handled as SIGCHLD/SIG_DFL by not posting the
signal when a child exits.
Similar fix applies to SIGCONT/SIG_IGN.
( SR: 8606132611 CR: JAGad01760 )
This patch is one of 16 patches (PHKL_21348-PHKL_21363)
required by the Praesidium IDS/9000 product. These patches
enable the collection and tracking of information from
various system calls. Unless all of the enabling patches
(or their successors) and the product are installed, and the
product is enabled, this change has no impact on the system.
Resolution:
This patch provides the interface required by IDS/9000 for
thread and process creation and teardown.
PHKL_20942:
( SR: 8606112164 DTS: JAGab84450 )
This is an enhancement for a corner case in RTSCHED
scheduling.
Resolution:
Code added to fine tune RTSCHED thread scheduling code path.
PHKL_20625:
( SR: 8606110344 CR: JAGab83048 )
Before calling ksw_remove_from_proc(), only MP locking
of the sched lock takes place and no UP locking is done.
During the execution of ksw_remove_from_proc(), if the
system services an I/O or timer interrupt on the interrupt
control stack without the lock protection, the ksigwait
structure is removed before the completion of
ksw_remove_from_proc(). Data page fault happens when
this structure is accessed.
Resolution:
Use spinlock() instead of MP_SPINLOCK() to protect the
sched lock for both UP and MP.
PHKL_19930:
( SR: 8606103530 DTS: JAGab70391 )
Signal delivery searched a single per-process linked list
for a candidate thread to deliver the signal to. If the
process is using AIO, it may have many threads that are
not candidates. These extra threads can significantly
slow the search.
Resolution:
Create a second per-process list populated only by threads
that can possibly handle signals.
PHKL_19531:
( SR: 1653296996 DTS: JAGaa94126 )
Specifying "sleep 99999999" will terminate immediately.
Any request in excess of 2^31-1 seconds will fail and
return immediately.
Resolution:
The sigtimedwait algorthim has been corrected to accomodate
delays of 2^32-1 for 32-bit systems, and 2^64-1 64-bit
systems by itteratively handling the requested time using
one or more pre-defined delays plus a residual.
SR:
1653296996 8606103530 8606103740 8606110344 8606112164
8606124297 8606127468 8606132611 8606141357 8606161075
8606163813
Patch Files:
OS-Core.CORE2-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32,v=HP:
/usr/conf/lib/libhp-ux.a(kern_fork.o)
/usr/conf/lib/libhp-ux.a(kern_sig.o)
/usr/conf/lib/libhp-ux.a(pm_proc.o)
/usr/conf/lib/libhp-ux.a(pm_signal.o)
/usr/conf/lib/libhp-ux.a(pm_threads.o)
/usr/conf/lib/libhp-ux.a(subr_threads.o)
OS-Core.CORE2-KRN,fr=B.11.00,fa=HP-UX_B.11.00_64,v=HP:
/usr/conf/lib/libhp-ux.a(kern_fork.o)
/usr/conf/lib/libhp-ux.a(kern_sig.o)
/usr/conf/lib/libhp-ux.a(pm_proc.o)
/usr/conf/lib/libhp-ux.a(pm_signal.o)
/usr/conf/lib/libhp-ux.a(pm_threads.o)
/usr/conf/lib/libhp-ux.a(subr_threads.o)
what(1) Output:
OS-Core.CORE2-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32,v=HP:
/usr/conf/lib/libhp-ux.a(kern_fork.o):
kern_fork.c $Date: 2001/02/15 14:53:16 $Revision: r1
1ros/13 PATCH_11.00 (PHKL_23407)
/usr/conf/lib/libhp-ux.a(kern_sig.o):
kern_sig.c $Date: 1999/12/07 14:02:53 $Revision: r11
ros/10 PATCH_11.00 (PHKL_20625)
/usr/conf/lib/libhp-ux.a(pm_proc.o):
pm_proc.c $Date: 2001/02/15 14:53:16 $Revision: r11r
os/13 PATCH_11.00 (PHKL_23407)
/usr/conf/lib/libhp-ux.a(pm_signal.o):
pm_signal.c $Date: 2001/02/15 14:53:16 $Revision: r1
1ros/14 PATCH_11.00 (PHKL_23407)
/usr/conf/lib/libhp-ux.a(pm_threads.o):
pm_threads.c $Date: 2001/02/15 14:53:16 $Revision: r
11ros/17 PATCH_11.00 (PHKL_23407)
/usr/conf/lib/libhp-ux.a(subr_threads.o):
subr_threads.c $Date: 2001/02/15 14:53:16 $Revision:
r11ros/15 PATCH_11.00 (PHKL_23407)
OS-Core.CORE2-KRN,fr=B.11.00,fa=HP-UX_B.11.00_64,v=HP:
/usr/conf/lib/libhp-ux.a(kern_fork.o):
kern_fork.c $Date: 2001/02/15 14:53:16 $Revision: r1
1ros/13 PATCH_11.00 (PHKL_23407)
/usr/conf/lib/libhp-ux.a(kern_sig.o):
kern_sig.c $Date: 1999/12/07 14:02:53 $Revision: r11
ros/10 PATCH_11.00 (PHKL_20625)
/usr/conf/lib/libhp-ux.a(pm_proc.o):
pm_proc.c $Date: 2001/02/15 14:53:16 $Revision: r11r
os/13 PATCH_11.00 (PHKL_23407)
/usr/conf/lib/libhp-ux.a(pm_signal.o):
pm_signal.c $Date: 2001/02/15 14:53:16 $Revision: r1
1ros/14 PATCH_11.00 (PHKL_23407)
/usr/conf/lib/libhp-ux.a(pm_threads.o):
pm_threads.c $Date: 2001/02/15 14:53:16 $Revision: r
11ros/17 PATCH_11.00 (PHKL_23407)
/usr/conf/lib/libhp-ux.a(subr_threads.o):
subr_threads.c $Date: 2001/02/15 14:53:16 $Revision:
r11ros/15 PATCH_11.00 (PHKL_23407)
cksum(1) Output:
OS-Core.CORE2-KRN,fr=B.11.00,fa=HP-UX_B.11.00_32,v=HP:
623508831 19940 /usr/conf/lib/libhp-ux.a(kern_fork.o)
3872570050 18612 /usr/conf/lib/libhp-ux.a(kern_sig.o)
2701488965 25172 /usr/conf/lib/libhp-ux.a(pm_proc.o)
1055460696 29140 /usr/conf/lib/libhp-ux.a(pm_signal.o)
3056116138 26180 /usr/conf/lib/libhp-ux.a(pm_threads.o)
3730951601 28284 /usr/conf/lib/libhp-ux.a(subr_threads.o)
OS-Core.CORE2-KRN,fr=B.11.00,fa=HP-UX_B.11.00_64,v=HP:
2859440542 44072 /usr/conf/lib/libhp-ux.a(kern_fork.o)
753452482 50152 /usr/conf/lib/libhp-ux.a(kern_sig.o)
4083235545 64040 /usr/conf/lib/libhp-ux.a(pm_proc.o)
2612489172 66448 /usr/conf/lib/libhp-ux.a(pm_signal.o)
533766970 60560 /usr/conf/lib/libhp-ux.a(pm_threads.o)
389544248 67184 /usr/conf/lib/libhp-ux.a(subr_threads.o)
Patch Conflicts: None
Patch Dependencies:
s700: 11.00: PHKL_18543
s800: 11.00: PHKL_18543
Hardware Dependencies: None
Other Dependencies:
PHKL_23407:
If NFS is installed on the system, all five patches
(PHNE_23249, PHKL_23406, PHKL_23407, PHKL_23408, PHKL_23409)
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_23001 PHKL_22568 PHKL_22145 PHKL_21830 PHKL_21348 PHKL_20942
PHKL_20625 PHKL_19930 PHKL_19531
Equivalent Patches: None
Patch Package Size: 550 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_23407
5. Run swinstall to install the patch:
swinstall -x autoreboot=true -x patch_match_target=true \
-s /tmp/PHKL_23407.depot
By default swinstall will archive the original software in
/var/adm/sw/save/PHKL_23407. 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_23407.text file is
available in the product readme:
swlist -l product -a readme -d @ /tmp/PHKL_23407.depot
To put this patch on a magnetic tape and install from the
tape drive, use the command:
dd if=/tmp/PHKL_23407.depot of=/dev/rmt/0m bs=2k
Special Installation Instructions:
This patch depends on base patch PHKL_18543.
For successful installation please insure that PHKL_18543
is already installed, or that PHKL_18543 is included
in the same depot with this patch and PHKL_18543
is selected for installation.
PHKL_23407:
If NFS is installed on the system, all five patches
(PHNE_23249, PHKL_23406, PHKL_23407, PHKL_23408, PHKL_23409)
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. All five of
these patches may be installed independently. If fewer than
four out of the four PHKL patches are installed, the
P_NOSTOP feature will not be enabled.
|