Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Jan 2007 01:21:41 -0600
From:      "Scot Hetzel" <swhetzel@gmail.com>
To:        "Alexander Leidinger" <Alexander@leidinger.net>
Cc:        freebsd-emulation@freebsd.org
Subject:   Re: linuxolator: proc/filesystems and sysfs function implementations
Message-ID:  <790a9fff0701252321x2c7bea62od928766849e32c68@mail.gmail.com>
In-Reply-To: <20070115105921.wbv2yrd4bkgokcko@webmail.leidinger.net>
References:  <790a9fff0701060012x40063f48pc842510b082df5a5@mail.gmail.com> <20070106130830.3c2e6d98@Magellan.Leidinger.net> <790a9fff0701132017g6c081567la4a759cea4618535@mail.gmail.com> <20070114105239.GA6955@stud.fit.vutbr.cz> <790a9fff0701141254s2c92b10ag6b042a019bc283c@mail.gmail.com> <20070115105921.wbv2yrd4bkgokcko@webmail.leidinger.net>

next in thread | previous in thread | raw e-mail | index | archive | help
------=_Part_47613_21023996.1169796101720
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

On 1/15/07, Alexander Leidinger <Alexander@leidinger.net> wrote:
> Quoting Scot Hetzel <swhetzel@gmail.com> (from Sun, 14 Jan 2007
> 14:54:28 -0600):
>
> > On 1/14/07, Divacky Roman <xdivac02@stud.fit.vutbr.cz> wrote:
>
> >> +                       buf = (char *)(uintptr_t)args->arg2;
> > :
> >> +                       bsd_to_linux_fs(vfsp->vfc_name, &fs);
> >> +                       len = strlen(fs.name) + 1;
> >> +                       error = copyout(fs.name, buf, len);
> >>
> >> no need to check if it fits in the userspace buffer? also you
> >> dont check return value
> >>
> >
> > According to the linux man page, there isn't a way to check the size
> > of buf, as we are only passed the value of the pointer in args->arg2.
>
> Ugh... there's not even an implicit size because of a fixed definition
> of the target buffer in some header? That would be very bad design.
> The kernel could overwrite userland data even if the kernel is not
> malicious (load a new FS with a too long name and BOOOOM).
>
> > Should I replace buf with  (char *)(uintptr_t)args->arg2 in the
> > copyout, since it is only used there.
> >
> > http://www.die.net/doc/linux/man/man2/sysfs.2.html
>
> ---snip---
> BUGS
> There is no libc or glibc support. There is no way to guess how large
> buf should be.
> ---snip---
>
> That's bad. That's very very bad. I don't like this in the FreeBSD
> kernel, I want an upper bound. Would you please try to find some
> artificial upper bound? The MFSNAMELEN would be one candidate. A
> better candidate would be a similar Linux value.
>

The patch is using MFSNAMELEN as the upper bound.

> >> also... you strcpy string to another string, are you sure it always
> >>  fits? how do you
> >> asure that?
> >>
> >
> > name can't be larger than MFSNAMELEN, and sizeof(fs->name) == MFSNAMELEN.
>
> Please use strlcpy with the sizeof (defensive programming).
>
Changed strcpy to strlcpy.

> > 16 is the value of MFSNAMELEN and used by the vfsconf struct to define
> > the max size of vfc_name.  I kept name (in the linux_file_system_type
>
> Is there a similar value in Linux? It would be better to use this if
> it exists.
>
> > struct) the same size, so that we didn't have to worry about the size
> > when using strcpy.
>
> When you find a value like MFSNAMELEN on Linux, please have a look at
> linux_misc.c:linux_prctl(), specially the LINUX_PR_{SET|GET}_NAME case
> and the comments in there. What you are doing here should be done
> similar.
>
I wasn't able to locate a value like MFSNAMELEN.  I looked at other
implementations and the SGI version uses FSTYPESZ  (same value as
MFSNAMELEN), to limit the size of the buffer.

The attached patch is using MFSNAMELEN to limit the size copied in
(LINUX_GETFSIND) and copied out (LINUX_GETFSTYPE).  LINUX_GETFSTYPE
also assumes that the buffer we are copying too is >= MFSNAMELEN.

I looked at the LTP sysfs02.c test, and in that file the buffer is set
to 40 bytes.

Attached is the updated patch, all of the code is now in
linux_misc.{c,h}, linprocfs.c and linux_util.h (define for
bsd_to_linux_fs function).

Scot
-- 
DISCLAIMER:
No electrons were mamed while sending this message. Only slightly bruised.

------=_Part_47613_21023996.1169796101720
Content-Type: text/x-diff; name=sysfs3.patch; charset=ANSI_X3.4-1968
Content-Transfer-Encoding: base64
X-Attachment-Id: f_eiwqe26k
Content-Disposition: attachment; filename="sysfs3.patch"

SW5kZXg6IGNvbXBhdC9saW5wcm9jZnMvbGlucHJvY2ZzLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2hvbWUvbmN2cy9zcmMvc3lzL2NvbXBhdC9saW5wcm9jZnMvbGlucHJvY2ZzLmMsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTA1CmRpZmYgLXUgLXIxLjEwNSBsaW5wcm9jZnMuYwotLS0gY29tcGF0
L2xpbnByb2Nmcy9saW5wcm9jZnMuYwkyMSBKYW4gMjAwNyAxMzoxODo1MiAtMDAwMAkxLjEwNQor
KysgY29tcGF0L2xpbnByb2Nmcy9saW5wcm9jZnMuYwkyNiBKYW4gMjAwNiAwMTo1NzowOCAtMDAw
MApAQCAtMTA0MSw2ICsxMTMzLDUxIEBACiB9CiAKIC8qCisgKiBGaWxsZXIgZnVuY3Rpb24gZm9y
IHByb2MvZmlsZXN5c3RlbXMKKyAqLworc3RhdGljIGludAorbGlucHJvY2ZzX2RvZmlsZXN5c3Rl
bXMoUEZTX0ZJTExfQVJHUykKK3sKKwlpbnQgaSwgZnNfZmxhZ3M7CisJY2hhciBmc19uYW1lW01G
U05BTUVMRU5dOworCXN0cnVjdCB2ZnNjb25mICp2ZnNwOworCXN0YXRpYyBjaGFyICpsaW51eF9u
b2RldmZzW10gPSB7CisJCS8qIEZpbGVzeXN0ZW1zIGluY2x1ZGVkIHdpdGggRnJlZUJTRCAqLwor
CQkiY29kYSIsICJkZXZmcyIsICJmZGVzY2ZzIiwgIm1mcyIsICJuZnMiLAorCQkibmZzNCIsICJu
dWxsZnMiLCAicG9ydGFsZnMiLCAicHJvY2ZzIiwKKwkJImxpbnByb2NmcyIsICJzbWJmcyIsICJs
aW5zeXNmcyIsICJ1bmlvbmZzIiwKKworCQkvKiBGaWxlc3lzdGVtcyBpbmNsdWRlZCB3aXRoIExp
bnV4ICovCisJCSI5cCIsICJhZnMiLCAiYXV0b2ZzIiwgImNpZnMiLCAiY29uZmlnZnMiLAorCQki
ZGVidWdmcyIsICJkZXZwdHMiLCAiZnVzZSIsICJob3N0ZnMiLAorCQkiaHBwZnMiLCAiaHVnZXRs
YmZzIiwgImpmZnMyIiwgIm5jcGZzIiwKKwkJIm5mc2QiLCAib3BlbnByb21mcyIsICJyYW1mcyIs
ICJyb290ZnMiLAorCisJCU5VTEwKKwl9OworCisJVEFJTFFfRk9SRUFDSCh2ZnNwLCAmdmZzY29u
ZiwgdmZjX2xpc3QpIHsKKworCQkvKiBEb2VzIHRoZSBmaWxlc3lzdGVtIHJlcXVpcmUgYSBkZXYg
ZW50cnk/ICovCisJCWZzX2ZsYWdzID0gMTsJLyogRlNfUkVRVUlSRVNfREVWICovCisJCWZvciAo
aSA9IDA7IGxpbnV4X25vZGV2ZnNbaV0gIT0gTlVMTDsgaSsrKSB7CisJCQlpZiAoc3RyY21wKGxp
bnV4X25vZGV2ZnNbaV0sIHZmc3AtPnZmY19uYW1lKSA9PSAwKSB7CisJCQkgICAgZnNfZmxhZ3Mg
PSAwOworCQkJICAgIGJyZWFrOworCQkJfQorCQl9CisKKwkJc3RybGNweShmc19uYW1lLCB2ZnNw
LT52ZmNfbmFtZSwgc2l6ZW9mKGZzX25hbWUpKTsKKwkJYnNkX3RvX2xpbnV4X2ZzKGZzX25hbWUp
OworCisJCXNidWZfcHJpbnRmKHNiLCAiJXNcdCVzXG4iLCBcCisJCSAgICBmc19mbGFncyA/ICIi
IDogIm5vZGV2IiwgZnNfbmFtZSk7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworLyoKICAqIEZp
bGxlciBmdW5jdGlvbiBmb3IgcHJvYy9jbWRsaW5lCiAgKi8KIHN0YXRpYyBpbnQKQEAgLTEwODYs
NiArMTIyMyw4IEBACiAJICAgIE5VTEwsIE5VTEwsIFBGU19SRCk7CiAJcGZzX2NyZWF0ZV9maWxl
KHJvb3QsICJkZXZpY2VzIiwgJmxpbnByb2Nmc19kb2RldmljZXMsCiAJICAgIE5VTEwsIE5VTEws
IFBGU19SRCk7CisJcGZzX2NyZWF0ZV9maWxlKHJvb3QsICJmaWxlc3lzdGVtcyIsICZsaW5wcm9j
ZnNfZG9maWxlc3lzdGVtcywKKwkgICAgTlVMTCwgTlVMTCwgUEZTX1JEKTsKIAlwZnNfY3JlYXRl
X2ZpbGUocm9vdCwgImxvYWRhdmciLCAmbGlucHJvY2ZzX2RvbG9hZGF2ZywKIAkgICAgTlVMTCwg
TlVMTCwgUEZTX1JEKTsKIAlwZnNfY3JlYXRlX2ZpbGUocm9vdCwgIm1lbWluZm8iLCAmbGlucHJv
Y2ZzX2RvbWVtaW5mbywKSW5kZXg6IGNvbXBhdC9saW51eC9saW51eF9taXNjLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2hvbWUvbmN2cy9zcmMvc3lzL2NvbXBhdC9saW51eC9saW51eF9taXNjLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC11IC1yMS4yIGxpbnV4X21pc2MuaAotLS0g
Y29tcGF0L2xpbnV4L2xpbnV4X21pc2MuaAkzMSBEZWMgMjAwNiAxMTo1NjoxNiAtMDAwMAkxLjIK
KysrIGNvbXBhdC9saW51eC9saW51eF9taXNjLmgJMjYgSmFuIDIwMDYgMDI6MTI6MzAgLTAwMDAK
QEAgLTQyLDQgKzQyLDkgQEAKIAogI2RlZmluZQlMSU5VWF9NQVhfQ09NTV9MRU4JMTYJLyogTWF4
aW11bSBsZW5ndGggb2YgdGhlIHByb2Nlc3MgbmFtZS4gKi8KIAorLyogZGVmaW5lcyBmb3Igc3lz
ZnMgKi8KKyNkZWZpbmUgTElOVVhfR0VURlNJTkQJCTEJLyogVHJhbnNsYXRlIGZpbGVzeXN0ZW0g
bmFtZSB0byBpbmRleCAqLworI2RlZmluZSBMSU5VWF9HRVRGU1RZUAkJMgkvKiBUcmFuc2xhdGUg
aW5kZXggdG8gZmlsZXN5c3RlbSBuYW1lICovCisjZGVmaW5lIExJTlVYX0dFVE5GU1RZUAkJMwkv
KiBSZXR1cm4gdG90YWwgbnVtYmVyIG9mIGZpbGVzeXN0ZW1zICovCisKICNlbmRpZgkvKiBfTElO
VVhfTUlTQ19IXyAqLwpJbmRleDogY29tcGF0L2xpbnV4L2xpbnV4X3V0aWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvaG9tZS9uY3ZzL3NyYy9zeXMvY29tcGF0L2xpbnV4L2xpbnV4X3V0aWwuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOApkaWZmIC11IC1yMS4yOCBsaW51eF91dGlsLmgKLS0t
IGNvbXBhdC9saW51eC9saW51eF91dGlsLmgJMjcgSnVuIDIwMDYgMTg6MzA6NDkgLTAwMDAJMS4y
OAorKysgY29tcGF0L2xpbnV4L2xpbnV4X3V0aWwuaAkyNiBKYW4gMjAwNiAwMjowMTozNCAtMDAw
MApAQCAtMTAxLDQgKzEwMyw3IEBACiBjaGFyCSpsaW51eF9nZXRfY2hhcl9kZXZpY2VzKHZvaWQp
Owogdm9pZAlsaW51eF9mcmVlX2dldF9jaGFyX2RldmljZXMoY2hhciAqc3RyaW5nKTsKIAorLyog
dXNlZCBieSBzeXNmcyBhbmQgbGlucHJvY2ZzX2RvZmlsZXN5c3RlbXMgZnVuY3Rpb25zICovCit2
b2lkCWJzZF90b19saW51eF9mcyhjaGFyICpuYW1lKTsKKwogI2VuZGlmIC8qICFfTElOVVhfVVRJ
TF9IXyAqLwpJbmRleDogYW1kNjQvbGludXgzMi9saW51eDMyX2R1bW15LmMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2hvbWUvbmN2cy9zcmMvc3lzL2FtZDY0L2xpbnV4MzIvbGludXgzMl9kdW1teS5j
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcjEuNyBsaW51eDMyX2R1bW15LmMK
LS0tIGFtZDY0L2xpbnV4MzIvbGludXgzMl9kdW1teS5jCTMxIERlYyAyMDA2IDEzOjE2OjAwIC0w
MDAwCTEuNworKysgYW1kNjQvbGludXgzMi9saW51eDMyX2R1bW15LmMJMTYgSmFuIDIwMDcgMDI6
NDI6MDMgLTAwMDAKQEAgLTUwLDYgKzUwLDUgQEAKIERVTU1ZKGdldF9rZXJuZWxfc3ltcyk7CiBE
VU1NWShxdW90YWN0bCk7CiBEVU1NWShiZGZsdXNoKTsKLURVTU1ZKHN5c2ZzKTsKIERVTU1ZKHF1
ZXJ5X21vZHVsZSk7CiBEVU1NWShuZnNzZXJ2Y3RsKTsKSW5kZXg6IGkzODYvbGludXgvbGludXhf
ZHVtbXkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9uY3ZzL3NyYy9zeXMvaTM4Ni9saW51
eC9saW51eF9kdW1teS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ1CmRpZmYgLXUgLXIxLjQ1
IGxpbnV4X2R1bW15LmMKLS0tIGkzODYvbGludXgvbGludXhfZHVtbXkuYwkzMSBEZWMgMjAwNiAx
MzoxNjowMCAtMDAwMAkxLjQ1CisrKyBpMzg2L2xpbnV4L2xpbnV4X2R1bW15LmMJMTYgSmFuIDIw
MDcgMDM6MDI6NTYgLTAwMDAKQEAgLTUyLDYgKzUyLDUgQEAKIERVTU1ZKGdldF9rZXJuZWxfc3lt
cyk7CiBEVU1NWShxdW90YWN0bCk7CiBEVU1NWShiZGZsdXNoKTsKLURVTU1ZKHN5c2ZzKTsKIERV
TU1ZKHZtODYpOwogRFVNTVkocXVlcnlfbW9kdWxlKTsKSW5kZXg6IGNvbXBhdC9saW51eC9saW51
eF9taXNjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvbmN2cy9zcmMvc3lzL2NvbXBhdC9s
aW51eC9saW51eF9taXNjLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjA1CmRpZmYgLXUgLXIx
LjIwNSBsaW51eF9taXNjLmMKLS0tIGNvbXBhdC9saW51eC9saW51eF9taXNjLmMJNyBKYW4gMjAw
NyAxOTozMDoxOSAtMDAwMAkxLjIwNQorKysgY29tcGF0L2xpbnV4L2xpbnV4X21pc2MuYwkyNiBK
YW4gMjAwNiAwNDo1Njo1MiAtMDAwMApAQCAtMTcxNiwzICsxNzI5LDExNCBAQAogewogCXJldHVy
biAoY2hyb290KHRkLCAoc3RydWN0IGNocm9vdF9hcmdzICopYXJncykpOwogfQorCisvKiB0YWJs
ZSB1c2VkIHRvIGRlcml2ZSBsaW51eCBmaWxlc3lzdGVtIG5hbWVzIHRvL2Zyb20gZnJlZWJzZCBm
aWxlc3lzdGVtIG5hbWVzICovCitzdGF0aWMgc3RydWN0IHtjb25zdCBjaGFyICpsX25hbWU7IGNv
bnN0IGNoYXIgKmJfbmFtZTt9IGwyYmZzX3RibFtdID0geworCXsgImV4dDIiLCAiZXh0MmZzIiB9
LAorCXsgImV4dDMiLCAiZXh0MmZzIn0sCisJeyAiaXNvOTY2MCIsICJjZDk2NjAifSwKKwl7ICJt
c2RvcyIsICJtc2Rvc2ZzIn0sCisJeyAiYnNkcHJvY2ZzIiwgInByb2NmcyJ9LAorCXsgInByb2Mi
LCAibGlucHJvY2ZzIn0sCisJeyAic3lzZnMiLCAibGluc3lzZnMifSwKKwl7ICJ1ZnMiLCAiZmZz
In0sCisJeyAidmZhdCIsICJtc2Rvc2ZzIn0sCisJeyBOVUxMLCBOVUxMIH0KK307CisKKy8qIAor
ICogVHJhbnNsYXRlIGJzZCBmaWxlc3lzdGVtIG5hbWUgdG8gbGludXggZmlsZXN5c3RlbSBuYW1l
CisgKiB1c2VkIGJ5IGxpbnByb2Nmc19kb2ZpbGVzeXN0ZW1zIGFuZCBzeXNmcyBMSU5VWF9HRVRG
U1RZUAorICovCit2b2lkCitic2RfdG9fbGludXhfZnMoY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsK
KworCWZvciAoIGkgPSAwOyBsMmJmc190YmxbaV0uYl9uYW1lICE9IE5VTEw7IGkrKykgeworCQlp
ZiAoc3RyY21wKGwyYmZzX3RibFtpXS5iX25hbWUsIG5hbWUpID09IDApIHsKKwkJCXN0cmxjcHko
bmFtZSwgbDJiZnNfdGJsW2ldLmxfbmFtZSwgc2l6ZW9mKG5hbWUpKTsKKwkJCWJyZWFrOworCQl9
CisJfQorfQorCitpbnQKK2xpbnV4X3N5c2ZzKHN0cnVjdCB0aHJlYWQgKnRkLCBzdHJ1Y3QgbGlu
dXhfc3lzZnNfYXJncyAqYXJncykKK3sKKwlpbnQgaSwgZXJyb3I9MDsKKwl1bnNpZ25lZCBpbnQg
aW5kZXggPSAwOworCWNoYXIgZnNfbmFtZVtNRlNOQU1FTEVOXTsKKwlzdHJ1Y3QgdmZzY29uZiAq
dmZzcDsKKworCXN3aXRjaCAoYXJncy0+b3B0aW9uKSB7CisJCS8qCisJCSAqIFRyYW5zbGF0ZSB0
aGUgZmlsZXN5c3RlbSBpZGVudGlmaWVyIHN0cmluZyBpbnRvIGEKKwkJICogZmlsZXN5c3RlbSB0
eXBlIGluZGV4LgorCQkgKi8KKwkJY2FzZSBMSU5VWF9HRVRGU0lORDoKKwkJCS8qIElzIGFyZ3Mt
PmFyZzEgdmFsaWQsIGlmIG5vdCB2YWxpZCByZXR1cm4gRUZBVUxUICovCisJCQllcnJvciA9IGNv
cHlpbnN0cigodm9pZCAqKShyZWdpc3Rlcl90KWFyZ3MtPmFyZzEsIGZzX25hbWUsCisJCQkJCSAg
TUZTTkFNRUxFTiwgTlVMTCk7CisJCQlpZiAoZXJyb3IpIHsKKwkJCQlyZXR1cm4gKGVycm9yKTsK
KyAJCQl9CisKKwkJCWZvciAoIGkgPSAwOyBsMmJmc190YmxbaV0ubF9uYW1lICE9IE5VTEw7IGkr
KykgeworCQkJCWlmIChzdHJjbXAobDJiZnNfdGJsW2ldLmxfbmFtZSwgZnNfbmFtZSkgPT0gMCkg
eworCQkJCQlzdHJsY3B5KGZzX25hbWUsIGwyYmZzX3RibFtpXS5iX25hbWUsCisJCQkJCQlzaXpl
b2YoZnNfbmFtZSkpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCVRBSUxRX0ZPUkVB
Q0godmZzcCwgJnZmc2NvbmYsIHZmY19saXN0KQorCQkJCWlmIChzdHJjbXAodmZzcC0+dmZjX25h
bWUsIGZzX25hbWUpID09IDApIHsKKwkJCQkJdGQtPnRkX3JldHZhbFswXSA9IGluZGV4OworCQkJ
CQlicmVhazsKKwkJCQl9IGVsc2UKKwkJCQkJaW5kZXgrKzsKKwkJCWlmICghdmZzcCkKKwkJCQly
ZXR1cm4gKEVJTlZBTCk7CisJCQlicmVhazsKKworCQkvKgorCQkgKiBUcmFuc2xhdGUgdGhlIGZp
bGUtc3lzdGVtIHR5cGUgaW5kZXggaW50byBhCisJCSAqIG51bGwtdGVybWluYXRlZCBmaWxlc3lz
dGVtIGlkZW50aWZpZXIgc3RyaW5nLgorCQkgKi8KKwkJY2FzZSBMSU5VWF9HRVRGU1RZUDoKKwkJ
CWluZGV4ID0gYXJncy0+YXJnMTsKKworCQkJVEFJTFFfRk9SRUFDSCh2ZnNwLCAmdmZzY29uZiwg
dmZjX2xpc3QpCisJCQkJaWYgKGluZGV4LS0gPD0gMCkKKwkJCQkJYnJlYWs7CisJCQlpZiAoIXZm
c3ApCisJCQkJcmV0dXJuIChFSU5WQUwpOworCisJCQlzdHJsY3B5KGZzX25hbWUsIHZmc3AtPnZm
Y19uYW1lLCBzaXplb2YoZnNfbmFtZSkpOworCQkJYnNkX3RvX2xpbnV4X2ZzKGZzX25hbWUpOwor
CisJCQkvKgorCQkJICogV2UgYXNzdW1lIHRoYXQgdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5CisJ
CQkgKiAodm9pZCAqKShyZWdpc3Rlcl90KWFyZ3MtPmFyZzIgaXMgZ3JlYXRlciB0aGFuIE1GU05B
TUVMRU4KKwkJCSAqLworCQkJZXJyb3IgPSBjb3B5b3V0KGZzX25hbWUsICh2b2lkICopKHJlZ2lz
dGVyX3QpYXJncy0+YXJnMiwKKwkJCQkJTUZTTkFNRUxFTik7CisJCQlicmVhazsKKworCQkvKgor
CQkgKiBSZXR1cm4gdGhlIHRvdGFsIG51bWJlciBvZiBmaWxlIHN5c3RlbSB0eXBlcworCQkgKiBj
dXJyZW50bHkgcHJlc2VudCBpbiB0aGUga2VybmVsLgorCQkgKi8KKwkJY2FzZSBMSU5VWF9HRVRO
RlNUWVA6CisJCQlUQUlMUV9GT1JFQUNIKHZmc3AsICZ2ZnNjb25mLCB2ZmNfbGlzdCkKKwkJCQlp
bmRleCsrOworCQkJdGQtPnRkX3JldHZhbFswXSA9IGluZGV4OworCQkJYnJlYWs7CisKKwkJLyog
SW52YWxpZCBvcHRpb24gcGFzc2VkICovCisJCWRlZmF1bHQ6CisJCQllcnJvciA9IEVJTlZBTDsK
Kwl9CisJcmV0dXJuIChlcnJvcik7Cit9Cg==
------=_Part_47613_21023996.1169796101720--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?790a9fff0701252321x2c7bea62od928766849e32c68>