OpenSolaris

Printable Version Enter a New Search
Bug ID 6694610
Synopsis hald leaks memory
State 10-Fix Delivered (Fix available in build)
Category:Subcategory utility:hal
Keywords
Responsible Engineer Lin Guo
Reported Against
Duplicate Of
Introduced In solaris_nevada
Commit to Fix snv_104
Fixed In snv_104
Release Fixed solaris_nevada(snv_104)
Related Bugs 6460497
Submit Date 28-April-2008
Last Update Date 4-December-2008
Description
Running the script below causes hald to balloon in RSS until
the machine runs out of memory:

#!/bin/bash

set -e

fill_fs() {
	echo "hello world" >>$1/hello
	mkdir $1/kernel
	cp /kernel/genunix $1/kernel/
}

umount /dev/lofi/1 || :
umount /dev/lofi/2 || :
umount /dev/lofi/3 || :
umount /dev/lofi/4 || :
umount /dev/lofi/5 || :
lofiadm -d /dev/lofi/1 || :
lofiadm -d /dev/lofi/2 || :
lofiadm -d /dev/lofi/3 || :
lofiadm -d /dev/lofi/4 || :
lofiadm -d /dev/lofi/5 || :

rm -rf /lomount
mkdir /lomount
mkdir /lomount/1
mkdir /lomount/2
mkdir /lomount/3
mkdir /lomount/4
mkdir /lomount/5

cd /lomount

ln -s /net/netinstall.eng/export/nv/x_iso/85pre/85pre.iso hsfs.good
mkfile 32m ufs.good
mkfile 32m udfs.good
mkfile 32m pcfs.good
echo "badfs" >badblocks
mkfile 32m fs.bad
chmod 644 ufs.good udfs.good pcfs.good badblocks fs.bad

# make the file systems
lofiadm -a /lomount/ufs.good
yes | newfs /dev/lofi/1
mount -F ufs /dev/lofi/1 /lomount/1
fill_fs /lomount/1
umount /lomount/1
lofiadm -d /dev/lofi/1
lofiadm -a /lomount/udfs.good
mkfs -F udfs /dev/lofi/1
mount -F udfs /dev/lofi/1 /lomount/1
fill_fs /lomount/1
umount /lomount/1
lofiadm -d /dev/lofi/1
lofiadm -a /lomount/pcfs.good
yes | mkfs -o nofdisk,size=65536 -F pcfs /dev/rlofi/1
mount -F pcfs /dev/lofi/1 /lomount/1
fill_fs /lomount/1
umount /lomount/1
lofiadm -d /dev/lofi/1

cp /lomount/ufs.good /lomount/ufs.2
cp /lomount/ufs.good /lomount/ufs.3
cp /lomount/ufs.good /lomount/ufs.4
# OK, set up is done

cmd=( "lofiadm -a FS ; mount FST LOFIDEV MP" "umount MP" "umount FS" "lofiadm -a LOFI" "lofiadm -d LOFI" )
mp=( /lomount/1 /lomount/2 /lomount/3 /lomount/4 /lomount/5 )
fstype=( ufs pcfs udfs )
fs=( /lomount/ufs.good /lomount/ufs.2 /lomount/ufs.3 /lomount/ufs.4 /lomount/pcfs.good /lomount/fs.bad /lomount/udfs.good )
lofidev=( /dev/lofi/1 /dev/lofi/2 /dev/lofi/3 /dev/lofi/4 /dev/lofi/5 )
lofi=( /dev/lofi/1 /dev/lofi/2 /dev/lofi/3 /dev/lofi/4 /dev/lofi/5 /lomount/ufs.good /lomount/ufs.2 /lomount/ufs.3 /lomount/ufs.4 /lomount/pcfs.good /lomount/fs.bad /lomount/udfs.good )

set +e

while :; do
	thismp=${mp[`expr $RANDOM % 5`]}
	thisfstype=${fstype[`expr $RANDOM % 3`]}
	thisfs=${fs[`expr $RANDOM % 7`]}
	thislofi=${lofi[`expr $RANDOM % 12`]}
	thislofidev=${lofidev[`expr $RANDOM % 12`]}
	thiscmd=${cmd[`expr $RANDOM % 5`]}
	thiscmd=`echo $thiscmd | sed "s+FST+-F $thisfstype+;s+FS+$thisfs+;s+MP+$thismp+;s+LOFI+$thislofi+;s+LOFIDEV+$thislofidev+;"`
	echo $thiscmd
	$thiscmd
	/usr/gnu/bin/sleep 0.01
done
Work Around
N/A
Comments
N/A