2009/3/10 Dina <dina.nimeh at sun.com>:
> usr/src/uts/common/io/lofi.c
...
> line 2236 and following (new file numbering):
> ? ? ? ?Does anything need to be done about -f(orce) option to lofi?
> ? ? ? ?I left a note there for the next person, but wouldn't expect
> ? ? ? ?anything other than a call to lofi_free_comp_cache() for the
> ? ? ? ?time being.


Hmm, ...

Why exactly do you have to call lofi_free_crypto() during
the forced lofi unmap?  I'd expect that the crypto state is freed
via lofi_close() -> lofi_free_handle() -> lofi_free_crypto() when
the last reference to the lofi device is closed...


I just tried to run the following shell script:

=================================
#!/bin/sh

set -ex

lofi=/dev/lofi/99
rlofi=`echo $lofi|sed s=lofi=rlofi=`
file=/tmp/floppy_crypt.img
size=1440k
crypt_alg=blowfish-cbc
mntpnt=/mnt

mkfile -n $size $file
lofiadm -c $crypt_alg -a $file $lofi
newfs $rlofi
mount $lofi $mntpnt
cp /etc/passwd $mntpnt
umount $mntpnt
lofiadm -d $lofi

sync

lofiadm -c blowfish-cbc -a $file $lofi
mount $lofi $mntpnt
lofiadm -f -d $lofi
umount $mntpnt
===================================


It panics during the last umount, when the last reference to the
encrypted file is released, after the forced unmap:

> ::status
debugging crash dump vmcore.1 (64-bit) from rosa
operating system: 5.11 snv_111_jk (i86pc)
panic message:
mutex_destroy: bad mutex, lp=ffffff014c0c26c0 owner=ffffff014b9ad080
thread=ffffff014b9bc1e0
dump content: kernel pages only
> ::stack
vpanic()
mutex_panic+0x73(fffffffffb92b450, ffffff014c0c26c0)
mutex_destroy+0x127(ffffff014c0c26c0)
lofi_free_crypto+0xda(ffffff014c0c2000)
lofi_free_handle+0x36(9000000063, 63, ffffff014c0c2000, ffffff0153b627a0)
lofi_close+0x93(9000000063, 1, 0, ffffff0153b627a0)
dev_close+0x3d(9000000063, 1, 0, ffffff0153b627a0)
device_close+0x6d(ffffff01548d1080, 1, ffffff0153b627a0)
spec_close+0x163(ffffff01548d1080, 1, 1, 0, ffffff0153b627a0, 0)
fop_close+0x71(ffffff01548d1080, 1, 1, 0, ffffff0153b627a0, 0)
ufs_unmount+0x78d(ffffff0153930768, 0, ffffff0153b627a0)
fsop_unmount+0x22(ffffff0153930768, 0, ffffff0153b627a0)
dounmount+0x5f(ffffff0153930768, 0, ffffff0153b627a0)
umount2_engine+0x5c(ffffff0153930768, 0, ffffff0153b627a0, 1)
umount2+0x142(8066cf0, 0)
_sys_sysenter_post_swapgs+0x14b()


I guess the lofi_free_crypto() call should be *removed* at lines
2236 and following; and the decompress caching changes
don't have to add anything at this place.

Reply via email to