Date: Mon, 02 Jul 2012 12:12:17 +0000 From: gpf@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r238799 - soc2012/gpf/pefs_kmod/sys/fs/pefs Message-ID: <20120702121217.1E2D41065673@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: gpf Date: Mon Jul 2 12:12:16 2012 New Revision: 238799 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=238799 Log: - if pefs_ioctl is called to retrieve name checksum (MAC) but the vnode has no keys, then the call to pefs_eccn_lookup() will result in a page fault kernel panic. fix the code's behavior for this case by avoiding the call of pefs_eccn_lookup(). Modified: soc2012/gpf/pefs_kmod/sys/fs/pefs/pefs_vnops.c Modified: soc2012/gpf/pefs_kmod/sys/fs/pefs/pefs_vnops.c ============================================================================== --- soc2012/gpf/pefs_kmod/sys/fs/pefs/pefs_vnops.c Mon Jul 2 11:46:47 2012 (r238798) +++ soc2012/gpf/pefs_kmod/sys/fs/pefs/pefs_vnops.c Mon Jul 2 12:12:16 2012 (r238799) @@ -2557,23 +2557,30 @@ } pefs_enccn_init(&enccn); - - cn.cn_nameiop = LOOKUP; - cn.cn_thread = td; - cn.cn_cred = cred; - cn.cn_lkflags = 0; - cn.cn_flags = 0; - cn.cn_nameptr = xncs->pxnc_filename; - cn.cn_namelen = xncs->pxnc_namelen; - - /* XXXgpf: does this lookup rely solely on present cache data? */ - error = pefs_enccn_lookup(&enccn, vp, &cn); + if (pefs_no_keys(vp)) { + enc = xncs->pxnc_filename; + enc_len = xncs->pxnc_namelen; + error = 0; + } + else { + cn.cn_nameiop = LOOKUP; + cn.cn_thread = td; + cn.cn_cred = cred; + cn.cn_lkflags = 0; + cn.cn_flags = 0; + cn.cn_nameptr = xncs->pxnc_filename; + cn.cn_namelen = xncs->pxnc_namelen; + + /* XXXgpf: does this lookup rely solely on present cache data? */ + error = pefs_enccn_lookup(&enccn, vp, &cn); + if (error == 0) { + enc = enccn.pec_cn.cn_nameptr; + enc_len = enccn.pec_cn.cn_namelen; + } + } VOP_UNLOCK(vp, 0); if (error == 0) { - enc = enccn.pec_cn.cn_nameptr; - enc_len = enccn.pec_cn.cn_namelen; - if (enc[0] != '.' || enc_len <= 1) { pefs_enccn_free(&enccn); error = EINVAL;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120702121217.1E2D41065673>