Sync with portage [Fri Feb 21 11:37:27 MSK 2014].
This commit is contained in:
parent
34edc6d0a4
commit
6c5d5c40eb
683 changed files with 6561 additions and 12314 deletions
|
@ -1,6 +1,12 @@
|
|||
# ChangeLog for app-admin/eselect-php
|
||||
# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-admin/eselect-php/ChangeLog,v 1.64 2014/02/17 21:07:42 ago Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-admin/eselect-php/ChangeLog,v 1.66 2014/02/20 14:05:11 ago Exp $
|
||||
|
||||
20 Feb 2014; Agostino Sarubbo <ago@gentoo.org> eselect-php-0.7.1-r3.ebuild:
|
||||
Stable for ppc, wrt bug #501312
|
||||
|
||||
20 Feb 2014; Agostino Sarubbo <ago@gentoo.org> eselect-php-0.7.1-r3.ebuild:
|
||||
Stable for ppc64, wrt bug #501312
|
||||
|
||||
17 Feb 2014; Agostino Sarubbo <ago@gentoo.org> eselect-php-0.7.1-r3.ebuild:
|
||||
Stable for arm, wrt bug #501312
|
||||
|
|
|
@ -12,24 +12,24 @@ DIST eselect-php-0.7.1.bz2 2251 SHA256 10aa400e2d08bc71989366993f12ddb546a0ea29f
|
|||
EBUILD eselect-php-0.6.2.ebuild 667 SHA256 72faed5e958e25f61ef1c082caf856a66588148641c1b268159e24f6ce425775 SHA512 0f69db4bfdd348c8fd98c6ca64549e0c0d07e673ba260daf9941fa058f2aa9d5038f87cefd9e1a282cf5f74ab2dfa15a9ff3d5ebf97c72c23790675e357f1bb0 WHIRLPOOL 0be89d938bd52b19b4ee1022c437f46d21e3fc8d429814fe2019ff160131ea239f3aec29a4b98ce5a5af2c3f8f0144f3604b7f3ecd16e681daf0226406c764bc
|
||||
EBUILD eselect-php-0.7.1-r1.ebuild 1391 SHA256 536bbf3c7b9cba046a831e04c8c283d15a6c47477018ed6f78cb1146990be2c7 SHA512 666c40700118862764dab19806b6b1814dd4ca5a0d36da900470b282e38afe33579fe34cac6447d2d4b8f405de7ee69da059dd20e6f591603d4a611fea35737c WHIRLPOOL 5901ab349cea93f697cc4bd9365ae9592f081fc5c192dffd8f31bfb2fd1dcb0fa252134512b6183555d3b278c6ea557a73baa372d39f2d2fdcf7e84c61fed862
|
||||
EBUILD eselect-php-0.7.1-r2.ebuild 1394 SHA256 7c4e4e6065cc8d8b3303f17712a403b92a5818b2ecae91109a5eaa0665b930d7 SHA512 1507a752d475149199ed10e0b0b0544f3d2e4d3ef0e033095bdf85a2aa4b3a864c320e5db29cd576f5a3f2d9ca40784cf2c4923fed9a1cd37bc7a1f83b7adf82 WHIRLPOOL e76dd9f1382322bfc35072e8dc82382d38b92658e0018bb2db0f63730782f7f05a98e506fb80bc08e63f430db0a1a863436d8f610a026c0c95e2fb095a9810ec
|
||||
EBUILD eselect-php-0.7.1-r3.ebuild 1312 SHA256 14696e758ba36b4b116ad887fbd671a808537f3688193b4c964fba4546fc4c5a SHA512 f082a9138b624d8f7da36af711b84ec9c6dc660c7bda99f4ea4d32ce0707e06636fbf28afcba7cfec5dcff06ba579769c0b561f693341e80703ac3b246f27e34 WHIRLPOOL 0ce993f45e02c8475f62987f4e89ecd360992948c370326e10f01ebdfc549f2c552c3216a4667584ea3ca452894b4d122d100eb447e2e6da2ebfef08be0a70b1
|
||||
EBUILD eselect-php-0.7.1-r3.ebuild 1310 SHA256 5bdd8f6e1a32b1e30fefa7cd445606ad2a678b7dbf5b2a82fcb0f011a49ffbcb SHA512 6483a7be627662d52d372808c4c5e322d93fb62d40d08c6b914adfe44d466d93ec19e317ad9334bab489ddec9bc1ae4981255176471ad5c9c115571d3d99e223 WHIRLPOOL 510f69b1176adc60ebdd5cee4e4d31cece1317c5d4d6774a3c6df7a9a7808d98c87cdd2c03e79a83516e0ee714595e862e0c10f363eb4cebd38faf4b41931091
|
||||
EBUILD eselect-php-0.7.1.ebuild 1183 SHA256 29e25cce35f65ff2d46e31824a14c9c3557e0930d19750bfa5b7df412bab334f SHA512 a4ac1a6a718612404a14d98b4f3b8d31e8177e2906e5f2936f548559a4962254c0ef71e2407d307d47383fb94e33c2ab0b99d3f686d6f989f75101c9b21d049a WHIRLPOOL 801e25f0987e12f793553676cdc9a81026a670aad8c7e17a17006c91152b306ecf7e0e84eea47c3e7c3cac596f0637e46758459688c2deea872a159420d01fbe
|
||||
MISC ChangeLog 7486 SHA256 7d67be81afb38857c957e97bee4457dc3a8ec3c870577e85a15c4e1a5f7d0c4c SHA512 01349da2d1f02421b9af81b2c239c714ee2660a2af7b6d96aa94d210eabc687933df1ad1f59e0a47925bac27654b199c95300edadb0b94d656933566540fc3e7 WHIRLPOOL b887b41d7a9e51c1581298a79c4395f157144b5939b2af95c50d415786e6f2f8a1232edf37f22488e4b8d0364ba8d1d87f159bfd6fdfe7e4243627fea37d7872
|
||||
MISC ChangeLog 7714 SHA256 c5f2f2bc827fa1084a45aebf560be492d47685f427d629a7b3347d1c9a62d470 SHA512 a94fc15a6865fd1a370679632f6e31d1ab6c2d3dd3c540c94298565feec524e22e17c30b6a2a07854a22f43449c55380f1ebeb3869ab1286d74a0f7f4fc798cb WHIRLPOOL bc568c129911d7dc985764dde0397b8946a9606449471a59bedf8d52346debb77c86289764062c87064ae01f7aa0aafcf847052c8b9c4269964b75aa915f80f1
|
||||
MISC metadata.xml 306 SHA256 007582443454394a0817ca5100a5bf091e027ddcc8d2639b8666fd264166e201 SHA512 661dd3eaea921697e52084355592a93158c63ca15bbb43c35ea62df8f864c5edee04d521f63d4b9a831ee82ff616203096bc9e50834a0f2550895c3cfcc770a3 WHIRLPOOL 5111e517b0c290c2294858d5391ff775825a045242b582f732b80b7434f9ee56630a84e6e97e978810dca268b5a4a62ccef582003276db4f21181a269fc8f777
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAEBCAAGBQJTAnofAAoJELp701BxlEWf1egP/RijEKOQIDajQ3/dufZbofJG
|
||||
dJ+IUOIb0yQqakVUTiazb8+xau3ZpIlcXle+CKy71ORyAe0kpENYhdGELSVLkbUP
|
||||
4zaZ+nlcKBkknjz/kNci1ciidjtWbrHJ4C4rWfN3sPvHgk+5iH5qVHA/S2J7u/72
|
||||
+hk9rJnb+pk1EHjo1sMTlXowvX+JOMhbGyJjhbcTZqJ5WuTT0ALTYi2qDuezc7dy
|
||||
hX8x1UbJhf6V97a6/qswLdjuWfTQvftVyFd9egPbR3qHxalYSvm+F4hPvlOvqozN
|
||||
OCCUQlEs2wmtxExshgXkU6WrhNEM7IiDNMySuU7A66IZFPHVhaefN7FnWENN/bdF
|
||||
IbxSttl8nqB6zM9Sx9n87iR/Pr8EelJ1SYKT/WoL+j3kIf8uBvkzAZn9gq56xeyD
|
||||
FJJC6AZ/QyypZ6nfB3KpgPy31TkTaRGlAbc4YLPd7qgg9rPWJI3ulhl6WWrBMMis
|
||||
tBJ5s/8YQqAXKLWgEH+U/yXON68PwScrpZYi6dwgVb26C4RD3y6EWQzUnnm83D1P
|
||||
j6BawfNVZV4W4DI9txxWhJ1f2Nrhb8QGr6SZNecDjJItw2I8RZXYQ4t4f4Ve+TdR
|
||||
ZuvZWTpex+V+PgjZazU/I5fUiF+OzZbsjQUH/o2Q3AJYoh0lrEg3eO9/ckyU8J5q
|
||||
SXuhwQIGnNWSLnZ0u5al
|
||||
=Z90m
|
||||
iQIcBAEBCAAGBQJTBguYAAoJELp701BxlEWf9msQALsonwBqjNxAd3n7MCpFfccd
|
||||
R2hENhKPBB+mEMBn13bNac1K3kujfblPEENZUVLMwzJJaUDyuf1UN5iVOSQtKuZ4
|
||||
0I1PgRRmMDj81za8NVgE6yN+lLkY0wzorLOP+kXxaYJf3jvd02AcCxf8HudD2lw2
|
||||
ES5nL7Ng5HjZya2QrmsQtH7bCo1yDnJSyxdoe5k2ufXouCiFuGYDKYQL+vXIiNzK
|
||||
BkhfpWpOrBGEhlS1OCPn/rFYMiduYmsjUyVMXDi3vJrRv2rzDThmuOV+A6DocVAx
|
||||
5CsQiWpA2TDbA8Lg2NYilHVa7w14H3HvI3FK1DPReyOTGh9QgGN5bWNAOPOUqGgE
|
||||
h7W2j/NMbOFZYk92W5HwJhXyJUdcV+U186aO3wKTa91/Xespso+bgWXIKNFq3ys5
|
||||
Fzw2DqqwHMHjJatXAMbiymOuJDMcn5hMQ/Le9pgtTA/0+oXYMMDO/E/BdHDwd5UY
|
||||
8Fj8MiZ9A23pXv+ZaVJIfRGHdqg4mYjb2/9h83Y8c/YEj7uE3jX9kkeqDxf5qMbz
|
||||
NrqILvto+TOE6aKpB7VrqP9eiR7aDoVV6U6Orwm8O/Fm9HjxZ2sEt/otYzXrzff1
|
||||
sfsjczAmqWeVBnprJYyIPFEQOc5HOSiYVxa1RC0KsS79IO4RTBRZfWpcPG1YMbEI
|
||||
1h1ireFjRG5Cmv92REoq
|
||||
=O9bS
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-admin/eselect-php/eselect-php-0.7.1-r3.ebuild,v 1.7 2014/02/17 21:07:42 ago Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-admin/eselect-php/eselect-php-0.7.1-r3.ebuild,v 1.9 2014/02/20 14:05:11 ago Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
|
@ -12,7 +12,7 @@ SRC_URI="http://dev.gentoo.org/~olemarkus/eselect-php/eselect-php-${PV}.bz2"
|
|||
|
||||
LICENSE="GPL-2"
|
||||
SLOT="0"
|
||||
KEYWORDS="alpha amd64 arm hppa ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc x86 ~amd64-fbsd ~x86-fbsd ~x86-freebsd ~amd64-linux ~ia64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos"
|
||||
KEYWORDS="alpha amd64 arm hppa ia64 ~mips ppc ppc64 ~s390 ~sh ~sparc x86 ~amd64-fbsd ~x86-fbsd ~x86-freebsd ~amd64-linux ~ia64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos"
|
||||
IUSE="fpm apache2"
|
||||
|
||||
DEPEND=">=app-admin/eselect-1.2.4
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
# ChangeLog for app-admin/glance
|
||||
# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-admin/glance/ChangeLog,v 1.30 2014/02/13 04:36:33 prometheanfire Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-admin/glance/ChangeLog,v 1.31 2014/02/20 21:00:22 prometheanfire Exp $
|
||||
|
||||
*glance-2013.2.2 (20 Feb 2014)
|
||||
|
||||
20 Feb 2014; Matthew Thode <prometheanfire@gentoo.org>
|
||||
+glance-2013.2.2.ebuild:
|
||||
BUMP!
|
||||
|
||||
*glance-2013.2.1-r1 (13 Feb 2014)
|
||||
|
||||
|
|
|
@ -8,27 +8,29 @@ AUX glance.initd 2504 SHA256 8000f93dfacd93fa5c4a6d07090bc3c27b63912b6ae55a026e2
|
|||
AUX havana-1-CVE-2014-1948.patch 1340 SHA256 12e12e016154dd5c8ca6c1e7093f46024a3f4e3c48d06492e0dd4dc76dfe7dbb SHA512 3976077da2c00c6e847c67e36c37e646a9186e0d123b7fbfb2e5adac61ffcf3c8a6f36f6e935b5a1c94ef519d8062db0ab7e14bb32da031c75a9270d9a400a41 WHIRLPOOL 53b735fe5ff6028cae7d506d67933fa232b45a1ef7096f8680fa410d48f36d3260493f5936aab7f48875cf0817b88bb5bb7d0d0b81cd6cb716c077a9f3b0c550
|
||||
DIST glance-2013.1.4.tar.gz 724110 SHA256 dfb8070a12bbf5761db1c55d21db4772fe81ed903d57cf991618e5224cbdcd67 SHA512 31c6c4ba0e777fcd345fe24d32eab548f8e9756764051d8b3c50d4d54404c902473760a0dc1158e8b6b42a0b81e14ae6a31d03bb07d4254fcb4960b05dd747a9 WHIRLPOOL 770f782f539b0ac465c00e726552f4b7fc8824c4a9da1a94ef4103ef56ce17ff1c2ccc75140b71c9f4d3d875885f169d3c1c6d761fed7ff691c83484b86de74f
|
||||
DIST glance-2013.2.1.tar.gz 1616541 SHA256 f04eb070a862c0d14bdd94204a6f17f4a813dbeacc1978dffb53752c360731aa SHA512 42a30004d7677c946216bd934712094f585d1a98c8e4d7a4b51a14af93eac3e251bd7ef16fa9d9915f3c2f75974969306439742aaeaa64bf3d983ab458531ee5 WHIRLPOOL b76513207e56f3ceb18976b901a79fd5fbff2a9779df1179e79dc5d10049d3b100124e61b55e26ef47f5df54f03a1122752939e4b028d7873b0b0b771aabe9ac
|
||||
DIST glance-2013.2.2.tar.gz 1333129 SHA256 311805e1df5005ee554871f0096845c966af3cec41cbcf00f1a7e906582b05e1 SHA512 4516b0ce08be63aa22ffaeb7b0f2bf7ef5e6637d9058461337bdaffb18c5876637cef5240068954f40c72a8021969d755a678c4d7172606592acce1e731594ae WHIRLPOOL a8c6ad325f3e78786762b5717dcee5878540cc0a06f4428cd47657ee85d93db5c2a3d7b47dc758e88e174c9ea141aba48bef902b52671b4d415c5f2d9463da2a
|
||||
EBUILD glance-2013.1.4.ebuild 3146 SHA256 1ea12e958ef036f33d7479bf594251c189d922af33cf4ddb0441ad429193bd96 SHA512 b8fa8788dbd8274fa43fa0dfe88fc8f43f832a82913d4816174bf771639eeb907659faad3315981706bac41b7143b75c5c3ae50d5ad8794d4fd9c88c932ae99a WHIRLPOOL 6a7826ce32d9ba75111c58d130366602d706f406ad0cfd4fa17f42694d73c985cf0c19ffb3f26f78fad58cf88f101456bd6e4614c29f54609e620c313f19626d
|
||||
EBUILD glance-2013.1.9999.ebuild 3106 SHA256 fc2b671e94bc47402a2e1037c68ca57791ff573b52b56b0b98b972b7e757ad8c SHA512 5a0a9517f6538c8824c18dcd3add74003c6f06d5277b11e6b62606c17428ecef6db7d6f35e0b7f5cdc29573cc08d3e702da0e20394c0e72f1b0bbea28fed852e WHIRLPOOL d6b1811af8f6ce1dfb190815c7f8b4ea6f23e9b8091939b816b4657c293dcd9e8652ae5443b5777c009c6ba9bf310c5b4be6665d64c966f0b5673138e7011070
|
||||
EBUILD glance-2013.2.1-r1.ebuild 5244 SHA256 4557b4ba949f54fe9f3079bc1b2eded9bd0cc914f536f7d6a797e846837dafcd SHA512 ce7b13fc86cf13f43e40fc847d95f8c6011a0e7b694ec9a08c7000d2c1234da958ed6e9f10aca3f37e0899d1e1575ee2b358d027e34600daabafd352b383ef66 WHIRLPOOL 371c3b19ac96435f9003c600778756f765ca8bb2875077c261f920be1554289ee5d80b070ce8c55232a36acf29a30aac6db59b1e032a37bbdfa2c39ab139790a
|
||||
EBUILD glance-2013.2.2.ebuild 5196 SHA256 941826da1ae57b2deb2b602e503cee0baf9f6286d68b15ad709ce8ba8147c7af SHA512 3375a9912dd019077819897cedb867508421002f96165a8f7b6770de58057a36f613c50fc06cda3e4f9b35fc8761347b390b07acc2cdbece13c403fc791fc1db WHIRLPOOL dccc6fd870afba584011f99498d61e0c5e69a96dc68b2ad5fd224c5cb733ad59eac3fbc9a94f033b751401b56b2119700ba7567e42de16f1c37004fe4ff2c7be
|
||||
EBUILD glance-2013.2.9999.ebuild 5204 SHA256 5499738bac7a4433bcb65240c77d777a346dc1213e456186a016e3b40b5cb920 SHA512 f630539d3ff76825f22f836660503e996a6dcfa6f7432ca7920c8dd48efb0f5cd085b99e4b42d8928678a15ab7751abc02b34af87add05a23b6625f07ebba2c8 WHIRLPOOL e7576b7c5e6a57e0b363fa306ff9aa105ed5cdf9a20677597474483a4db4121c9877de2e1bfe8bfbc80ae0ddc315eeb370a41c3ef336a74262c5983d19db1613
|
||||
EBUILD glance-9999.ebuild 3029 SHA256 a0274ad3f834ad7be23bbcaea00c4a8422857bb3903f89954da901ebeeb7872b SHA512 2c9baf347f3577c4fcb62d1bed5f328e2dbd8e2c2149e1dd4b5b4d317520da5e8fa09d8c352d7bbeeb65c4debb35d3fc9df5c436fc51f707717e18bddeb4743e WHIRLPOOL 7f3a20e0ff8404c4ef130b1b2a84543e91acc95d51d332028dca474a2e2e44c2aae2f5e409b2258eec35a09c4c34c93939f99fd182c8050fb845d462e9bde0d4
|
||||
MISC ChangeLog 6837 SHA256 f5b1cf42533e3bf923bacb1aacf6451962d74ab023a960edcd36241a77e2e418 SHA512 cda47f074eea0435e1ead27cc6b7c0f1c6f6d05b3a684bf7e8ebaf686948cd0b7015d7ef86805bc7fd696e9f16efdcd40b4ba651ec8306a3ec2173779af08d7e WHIRLPOOL 91662aa89e62aec8818397aa8a42dd9b468cd1341d110cacdd9da540503b9fed663af56716c4d12cbb790180563928941b9c3f31a2312d3614f9d834492bef06
|
||||
MISC ChangeLog 6962 SHA256 41b10dfae6d94397894eabd9d5b7746c8c582b57acf45cadaaf9ff5ccc311be0 SHA512 2463c6cd96a22ae4bdb79c105559ee2a7473b57be1795091f1683aab42289e777f913cf2a45c2e3c209e20161a7da8d497213bc8761939f27afd07475a751890 WHIRLPOOL e730ac02cbd0b8fe36c47bddb2272575bc93bfb3720566b3e41941a24a1b9a1b3b65a668fd3a2937d87bd37ea40ca6db523518a22e0002c58f0c68f1fdf201bf
|
||||
MISC metadata.xml 551 SHA256 de9d9d349c334c740b04384a4f1288e7f2f8491751c38b5846fa5fdc801dd3c0 SHA512 0141af1612f84846713c8ffe8d0c4e653a77772d4e050deb5b9a47882aed9f803c7a0ebe7709f64279b04a19658f10da4aef962a70ecc7aebc2e7dce2ede4c68 WHIRLPOOL 4858e7841f26f04b1e35838cfb475cf34506fdb26e1a03f75c219d599dddac73fbc3429c80b5ac7c752fe2782445e2d492f58fc0b87da44ddc6d03b4710c8f13
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAEBCAAGBQJS/EvdAAoJECRx6z5ArFrDQ/MP/A3CLm4CiyT1vlNcZLxvKiTd
|
||||
gVUuQJIz90HGztBC3lX9tZkzIaKjDdkreXuL8+P3Cz+6vsdlKed5evCUmktbbqe5
|
||||
bHImge5Ud1H5uRcc7rOQH2xzw57XsMxFuqzO8KYQWV/9CjNGY1IsTeCL38RmouSP
|
||||
DI3pZvzLobiSXD3Dh/6Aaqjb01xemkxWXSdI4z7MPBvWSUBkB/29rGEapkOg69Pv
|
||||
weHGXe9gF9FAXERVB6C2ofQOK1RoJqAU7WzVSNuRu2Z3XmRfGMNgMcjfYpnf1uNS
|
||||
OMxrUqsDxksx5zoB5hK/Tmj1f6d4x2JkVcm/IIPngHsCzlrtDSmZ5mBzIX0dOFaD
|
||||
v6tZ+CDWohXqc2k5Y9357F5lYSAsBIT75u22ulnnjh2u0dvYOtwlFnz8sLagK6Ds
|
||||
563IKU+VMCT0WgizgZna50v8NNEOpQLB6xWTFsrgTres26A9RUMdXPpRTW4EKWYD
|
||||
rtMql6QGWm1vQeThFnkZ/AyTnd6KYBJ09cqdrFjrIWYr321VukDnEp5UsIYBWeJF
|
||||
yBjF7qHCpjEIqSn/UoHyjxCZ+N8qE7zn/9m3nT796ENAHxXbdUdF0yDIbIGH4vy8
|
||||
MIjAL/d/wLNotLkQESoqCRiH88fp6KgFgDntpxozngtmDyUxfsjwrzz6ZcbrmHn9
|
||||
HIgIzZL6IYvr8O91qCTq
|
||||
=hEk0
|
||||
iQIcBAEBCAAGBQJTBmz3AAoJECRx6z5ArFrDG8kP/13ZXDzS2W+WJmUm3HX7Jayx
|
||||
2Fm+KZz9cI59QfnKt5XZ+SyLbp2kNRQyhEIiiOy2tqu9sg48YToEnJ4l3RMwHfV7
|
||||
xEvZZNA/Xrp1WAQ25vagfiQrv27119cmRfz3p2U5Z3lpvZ16jOv0QjH2Y0Gku0Kf
|
||||
FPoVR2nN/FuYNeX91VO7asQ5xMl05Bnto3QDu/Zj53Ecb/0dhg84qWll4IHbz5FA
|
||||
U/IgcCpKlc2DCS06N5n7IPZPWzjsDArwxyXLPRDH6ZMOkL53uBQ82aEQHF4LWzhZ
|
||||
F6DoqGr1ZN/tj8c+OsUyZWWBWem7OC5MIGBn+JmeoU/eZ4o6V9BL+y58gHWS6GsI
|
||||
58/L1A3/FvB8Z0NI96BceS6MK5vJydOYNB98gKkSeWcFv1q4MsAehRjFvRKYsq5U
|
||||
eVj/HfNFZjbcPCtMvxT3LHrzAiUNY2fz9RcfGjxC2AqRitouXlwc8Ami899gNTDp
|
||||
pIj3XcxATrsITzjzi2Dg/Weo1AhDSYwS0rgpfRdGkfdEN1KY+MeVbkrWMlE+s//8
|
||||
Qjglu+LO7BT/kVx0xGBrFHxnbg64+k6eqY40Z5uhdRYrVDEOMDKL3HJYpy+NyY/r
|
||||
M3K5tk38HLWI3RJYWPQhBFPz8KoJ5z7fAnCeSzhezLxKhhHVFENR3iKQeiyl/H67
|
||||
O2tHeTQhCZNp694Jk22J
|
||||
=cFV1
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
139
app-admin/glance/glance-2013.2.2.ebuild
Normal file
139
app-admin/glance/glance-2013.2.2.ebuild
Normal file
|
@ -0,0 +1,139 @@
|
|||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-admin/glance/glance-2013.2.2.ebuild,v 1.1 2014/02/20 21:00:22 prometheanfire Exp $
|
||||
|
||||
EAPI=5
|
||||
PYTHON_COMPAT=( python2_7 )
|
||||
|
||||
inherit distutils-r1 user
|
||||
|
||||
DESCRIPTION="Provides services for discovering, registering, and retrieving
|
||||
virtual machine images with Openstack"
|
||||
HOMEPAGE="https://launchpad.net/glance"
|
||||
SRC_URI="http://launchpad.net/${PN}/havana/${PV}/+download/${P}.tar.gz"
|
||||
|
||||
LICENSE="Apache-2.0"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64 ~x86"
|
||||
IUSE="doc mysql postgres +sqlite +swift test"
|
||||
REQUIRED_USE="|| ( mysql postgres sqlite )"
|
||||
|
||||
DEPEND="dev-python/setuptools[${PYTHON_USEDEP}]
|
||||
dev-python/pbr[${PYTHON_USEDEP}]
|
||||
test? ( >=dev-python/coverage-3.6[${PYTHON_USEDEP}]
|
||||
>=dev-python/fixtures-0.3.14[${PYTHON_USEDEP}]
|
||||
dev-python/nose[${PYTHON_USEDEP}]
|
||||
dev-python/nose-exclude[${PYTHON_USEDEP}]
|
||||
>=dev-python/openstack-nose-plugin-0.7[${PYTHON_USEDEP}]
|
||||
>=dev-python/mock-1.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/nosehtmloutput-0.0.3[${PYTHON_USEDEP}]
|
||||
>=dev-python/sphinx-1.1.2[${PYTHON_USEDEP}]
|
||||
>=dev-python/requests-1.1[${PYTHON_USEDEP}]
|
||||
>=dev-python/testtools-0.9.32[${PYTHON_USEDEP}]
|
||||
>=dev-python/psutil-0.6.1[${PYTHON_USEDEP}]
|
||||
dev-python/mysql-python[${PYTHON_USEDEP}]
|
||||
dev-python/psycopg[${PYTHON_USEDEP}]
|
||||
>=dev-python/pyxattr-0.5.0[${PYTHON_USEDEP}]
|
||||
~dev-python/pep8-1.4.5[${PYTHON_USEDEP}]
|
||||
>=dev-python/pyflakes-0.7.2[${PYTHON_USEDEP}]
|
||||
<dev-python/pyflakes-0.7.4[${PYTHON_USEDEP}]
|
||||
~dev-python/flake8-2.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/hacking-0.5.6[${PYTHON_USEDEP}]
|
||||
<dev-python/hacking-0.8[${PYTHON_USEDEP}]
|
||||
>=dev-python/Babel-1.3[${PYTHON_USEDEP}]
|
||||
=dev-python/pysendfile-2.0.0[${PYTHON_USEDEP}]
|
||||
dev-python/qpid-python[${PYTHON_USEDEP}]
|
||||
dev-python/oslo-sphinx
|
||||
>=dev-python/sphinx-1.1.2[${PYTHON_USEDEP}]
|
||||
<dev-python/sphinx-1.2[${PYTHON_USEDEP}] )"
|
||||
#note to self, wsgiref is a python builtin, no need to package it
|
||||
#>=dev-python/wsgiref-0.1.2[${PYTHON_USEDEP}]
|
||||
|
||||
RDEPEND=">=dev-python/greenlet-0.3.2[${PYTHON_USEDEP}]
|
||||
>=dev-python/eventlet-0.13.0[${PYTHON_USEDEP}]
|
||||
sqlite? ( >=dev-python/sqlalchemy-0.7.8[sqlite,${PYTHON_USEDEP}]
|
||||
<dev-python/sqlalchemy-0.7.99[sqlite,${PYTHON_USEDEP}] )
|
||||
mysql? ( >=dev-python/sqlalchemy-0.7.8[mysql,${PYTHON_USEDEP}]
|
||||
<dev-python/sqlalchemy-0.7.99[mysql,${PYTHON_USEDEP}] )
|
||||
postgres? ( >=dev-python/sqlalchemy-0.7.8[postgres,${PYTHON_USEDEP}]
|
||||
<dev-python/sqlalchemy-0.7.99[postgres,${PYTHON_USEDEP}] )
|
||||
>=dev-python/anyjson-0.3.3[${PYTHON_USEDEP}]
|
||||
>=dev-python/pastedeploy-1.5.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/routes-1.12.3[${PYTHON_USEDEP}]
|
||||
>=dev-python/webob-1.2.3[${PYTHON_USEDEP}]
|
||||
<dev-python/webob-1.3[${PYTHON_USEDEP}]
|
||||
virtual/python-argparse[${PYTHON_USEDEP}]
|
||||
>=dev-python/boto-2.4.0[${PYTHON_USEDEP}]
|
||||
!~dev-python/boto-2.13.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/sqlalchemy-migrate-0.7.2[${PYTHON_USEDEP}]
|
||||
dev-python/httplib2[${PYTHON_USEDEP}]
|
||||
>=dev-python/kombu-2.4.8[${PYTHON_USEDEP}]
|
||||
>=dev-python/pycrypto-2.6[${PYTHON_USEDEP}]
|
||||
>=dev-python/iso8601-0.1.8[${PYTHON_USEDEP}]
|
||||
>=dev-python/oslo-config-1.2.1[${PYTHON_USEDEP}]
|
||||
swift? (
|
||||
>=dev-python/python-swiftclient-1.5[${PYTHON_USEDEP}]
|
||||
<dev-python/python-swiftclient-2[${PYTHON_USEDEP}]
|
||||
)
|
||||
>=dev-python/lxml-2.3[${PYTHON_USEDEP}]
|
||||
dev-python/paste[${PYTHON_USEDEP}]
|
||||
dev-python/passlib[${PYTHON_USEDEP}]
|
||||
>=dev-python/jsonschema-1.3.0[${PYTHON_USEDEP}]
|
||||
!~dev-python/jsonschema-1.4.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/python-cinderclient-1.0.6[${PYTHON_USEDEP}]
|
||||
>=dev-python/python-keystoneclient-0.3.2[${PYTHON_USEDEP}]
|
||||
dev-python/pyopenssl[${PYTHON_USEDEP}]
|
||||
>=dev-python/six-1.4.1[${PYTHON_USEDEP}]"
|
||||
|
||||
PATCHES=( "${FILESDIR}/${PN}-2013.2-sphinx_mapping.patch" )
|
||||
|
||||
pkg_setup() {
|
||||
enewgroup glance
|
||||
enewuser glance -1 -1 /var/lib/glance glance
|
||||
}
|
||||
|
||||
python_compile_all() {
|
||||
use doc && "${PYTHON}" setup.py build_sphinx
|
||||
}
|
||||
|
||||
python_test() {
|
||||
# https://bugs.launchpad.net/glance/+bug/1251105
|
||||
# https://bugs.launchpad.net/glance/+bug/1242501
|
||||
# 2013.2 requires =dev-python/iso8601-0.1.4
|
||||
nosetests glance/ || die "tests failed under python2.7"
|
||||
}
|
||||
|
||||
python_install() {
|
||||
distutils-r1_python_install
|
||||
newconfd "${FILESDIR}/glance.confd" glance
|
||||
newinitd "${FILESDIR}/glance.initd" glance
|
||||
|
||||
for function in api registry scrubber; do
|
||||
dosym /etc/init.d/glance /etc/init.d/glance-${function}
|
||||
done
|
||||
|
||||
diropts -m 0750
|
||||
dodir /var/run/glance /var/log/glance /var/lib/glance/images /var/lib/glance/scrubber
|
||||
keepdir /etc/glance
|
||||
keepdir /var/log/glance
|
||||
keepdir /var/lib/glance/images
|
||||
keepdir /var/lib/glance/scrubber
|
||||
insinto /etc/glance
|
||||
|
||||
doins "etc/glance-api-paste.ini"
|
||||
doins "etc/glance-api.conf"
|
||||
doins "etc/glance-cache.conf"
|
||||
doins "etc/glance-registry-paste.ini"
|
||||
doins "etc/glance-registry.conf"
|
||||
doins "etc/glance-scrubber.conf"
|
||||
doins "etc/logging.cnf.sample"
|
||||
doins "etc/policy.json"
|
||||
doins "etc/schema-image.json"
|
||||
|
||||
fowners glance:glance /var/run/glance /var/log/glance /var/lib/glance/images /var/lib/glance/scrubber /etc/glance
|
||||
}
|
||||
|
||||
python_install_all() {
|
||||
use doc && local HTML_DOCS=( doc/build/html/. )
|
||||
distutils-r1_python_install_all
|
||||
}
|
|
@ -1,6 +1,12 @@
|
|||
# ChangeLog for app-admin/hardening-check
|
||||
# Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-admin/hardening-check/ChangeLog,v 1.5 2013/12/29 17:49:34 ago Exp $
|
||||
# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-admin/hardening-check/ChangeLog,v 1.7 2014/02/20 13:11:53 ago Exp $
|
||||
|
||||
20 Feb 2014; Agostino Sarubbo <ago@gentoo.org> hardening-check-2.5.ebuild:
|
||||
Stable for x86, wrt bug #500100
|
||||
|
||||
20 Feb 2014; Agostino Sarubbo <ago@gentoo.org> hardening-check-2.5.ebuild:
|
||||
Stable for amd64, wrt bug #500100
|
||||
|
||||
*hardening-check-2.5 (29 Dec 2013)
|
||||
|
||||
|
|
|
@ -1,26 +1,26 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA512
|
||||
Hash: SHA256
|
||||
|
||||
DIST hardening-wrapper_2.4.tar.gz 21082 SHA256 411248b1f89e512bd27f96cfaef2aac4fe5c50884ca0769ba94dd2b90bea5d5a SHA512 59366393821116493e204972009bc614a3aee61b15427ecf0a4bc23accea00e0891196b1250f6a3c30e9633ca54022f39ad83d49a213cd4c9aaa78e992647a07 WHIRLPOOL a2aef6b6b302a2b238953b53946865ab7864b36914d0f168073a958c8ae8041d75456283f806d99a124fd853bf775635c7bb4af0f74a5245f49b378eb28ee763
|
||||
DIST hardening-wrapper_2.5.tar.gz 21157 SHA256 9ae2cc44d9543476b5b8655b4699af5421218dce44ce0d4a89cf5d81ba12b9bf SHA512 e2c183736e9f1dd1b39ecde7d2bf2c22d4c87c69cb158d98bb527b8325d88ea86bceb6087633cc761e973a22d0cf97c6266464d117e408ed2aee2e67c8ab5565 WHIRLPOOL 652327876a29ad8a69529bcb85b1331a227348a1ca87c1e5cf69fbcea0ad7c57afdcb14536eebfc8668834a701ee80f8579b8851f596e41ee782e4c6dbf47cb9
|
||||
EBUILD hardening-check-2.4.ebuild 825 SHA256 3e2bcb30f6981b5f1bcec47e5bff7e60e6d189ca2d529559a3e062639dc70577 SHA512 5505731706834792b6f1b443551bb4cba0f44f0bb06fdce81ba39f4b240b2bcd55bdf4d47ed1d0b8e1aeada137986ef3ec5069eaf28e0cc98e0319b3d76e8609 WHIRLPOOL bea1c320462f74eba8c85b65c91023820de93414c2cb4e74cc8e16ef26ba58a930b275264f5d083a32eeb2fe4e55b0a0ea6c16f78ee1304c5f5bd45d41ade7f7
|
||||
EBUILD hardening-check-2.5.ebuild 622 SHA256 db7063e1d432ed1303602ec61faf2780e37176aca7951b158777ccbec43ee4ac SHA512 a686ab2b1164ee33140f090cbe45fa0c08f6aceb155a70a3af73004bc1be3fb3ca8bedffd66ff7ad20ffce8310e8ca59ce63d65584ed4ab7aa7c023a6d20a2ec WHIRLPOOL 530fcf599f3a245317c20417e1d18bf730b865be58f6f7e6de8f80a5ae81c52fc784b205a49174be68ab81d7c8ad37adff9f87e3e1048184ff014160eb133123
|
||||
MISC ChangeLog 907 SHA256 aaf8b1947c50d85741f6028bce84b14bf9b073b8230c9a7b3af3244af97c9e5d SHA512 a7c12c63c507b4b0dbe346b825ec6ec8e152c616ebac6470d2f939c38475aa4de58f7f8b6c8b7eaa294aeab85c322d933a0c01baf65f9b02e2a2aff662ed3154 WHIRLPOOL 8bd2192db9fb7b21834d2cf3f91f2182db316bcd032bcd9effb1f3a0ad52dd3ce33f402b9642ec24b2fc50b4c49fe7f1839fb44e7521d577df8b284c8dedae73
|
||||
EBUILD hardening-check-2.5.ebuild 620 SHA256 4aee4fe4e2850a77025f1e69b9ac77f72e103d5b3434dde196ec85555957c31f SHA512 a729b7f28a3ab4d8364e67e42f2dbaceb38eb61764c130e6de524ce3cb7e598292017a72be620c81b18b3ab2ba3f35843659cb7c8a122d3e9deff4e5ed21cc16 WHIRLPOOL ae39077e7ec7c9dbb3a652ae38391b78e8dae418b7d1d5f979af15e5b6f072c9899373f79ccd882af273281738adada169e476e6bfc8423467cd88fffaf24501
|
||||
MISC ChangeLog 1133 SHA256 eba64262d560c19696fb8d9b26c23c943d724d43d569e247e25ccbf44b9c20d0 SHA512 5f5183ec6e6a09be7fdac7a1ab31f65df52051bc04b55da73d1fa4f32b47886d988c439de3c874dcd1eb527b31e87fa3819776ae119954b7df21ccfcba6d8d4a WHIRLPOOL c2dc84106af2bd6e83072f8b72a57fcc43a9928b7d67a7c1438259c0444ecbe9c52f9cf5121d9d8d5a45eeccb8a0a31e682f232b82f5141bab2c7a3565b3b336
|
||||
MISC metadata.xml 402 SHA256 8e563d839499fad9af4524f6e182c346f266114b4044259ec839b2d4e42dd0ae SHA512 c7f67d4270ee05d04ca308cff1361d8fb3bea568c358ec88c442aa265f46cac6def3935bb42018c04a4ecbfb757441c9c8fb0f5223cb371ef0de4c20fa41fe0a WHIRLPOOL 0df4ab069199d2128166881f7439f20456ee5c9b6d546f214c5b77201dad2d32c4ce59246730399c89b905cf7a020690af4bb8a946b4c99ca22ebb870a418e8c
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAEBCgAGBQJSwF+7AAoJELp701BxlEWfreEQAI6xhZjhKGZTh4YbL5ikeF9+
|
||||
OAsAoz7AAknI5CTL4L9JOR0tYMV+KQRExH0G76ZMvaXEXGhlIN2u/jSdBIOtl1K1
|
||||
d8IN3MZWAGhIScU3zD0byryYTay0CrL48RK4vDKwDFznAgfNSP5xLu7OpQ2VajA2
|
||||
Hje3U8GUYutyhnvfJsPLI17lkjI3HH8BPImm+No+uqRJacB89vu1BzuIfkMySfZ3
|
||||
hsPMoJT/zeoy6jrYKUDjT8XcyVAt9HiSyTfpCnoJWQGCKVBLiEZ+IrZdl/kYy4wv
|
||||
mYytMv0xG8mms/GXGvw0xIpai/ZEK5Fu6l+WejMOuHKH3Gv9Bht7Uv5c9Qj6jwbi
|
||||
D2wNkYAXP/UngNKz8BP8+CcoDwpZJ3+OpERdJaJnaj2y5dbrIl4xWGO/1Tdtcf5w
|
||||
5mUERjs4Ju59u5gjtDshpctCslWG734had38mrvRJIaI+Z9U3J+pg+n8ok/MbJm+
|
||||
/aqm3rRp/mbiS+kJUKGkCXKiMZ6IG/Bk65fXyQ5QKTzByZ3ZGhc8yen4ES2lgvGD
|
||||
KZt0mOzo4srJES88WpP76tR4f9e/u9sus0JBHGYxF0H+g1sUZEJtA0wdBBTHdDQE
|
||||
dANMA42v4JJCH2DqiGpj9eNFh1ySFc6lEYW3xiepIVIGwPD1iQA2nficHF4bCh8R
|
||||
7iZHmd1S/DqxRrr1KHIJ
|
||||
=vfgl
|
||||
iQIcBAEBCAAGBQJTBf8aAAoJELp701BxlEWf2JEQAKEWtHfysJLOONug1cV38ccK
|
||||
0zoa4xxhZNn2RCuzIAcrn5PuuhENCB/4pau7dWWvgC1y5+CsJU1evbIcEJzD5L7I
|
||||
niAPj9BMSClCg9VxV5Cq7rWPA/MNyUMNDIowKYZrwNiiB5TStYaegzOS16cQaJkm
|
||||
VSIA40YeAQCO30FZwIIJsxsB/kvk9+FzY6Kuf4xM3ZntDt57AgRADtfZP0xYIItk
|
||||
tyiBCuFnKnLLYNlgR1iy5/FTfCgney8dNNIsqMt7VTnpY5EX51A6t3l7AjQg0x7i
|
||||
Y8cLEvtvfQyFUa6tYjr5FQSkqgwGvUhUsc7ThRC5rFPyoeQOi2FUXuq/7ER3t5jV
|
||||
WXzRkoKl8TFM5Z79cXqITlY7uqGinR+fZTsgFOUSizX59fe/gojDt40pQYPWD5lS
|
||||
o28AzBWN6eCdCrC5difHTvu6MWW/t6fGRef5Lv9B6J48JZo0OchuSd7Av4bx5lxN
|
||||
jyhsjoKhsKhyZCeuqs9fJXwLHdcQAOQC6KQG85tKxZBRHTaDbqQano6wPIa/FToW
|
||||
XG5D+cyaLYnEpIVpImnocpu2Vl7jgMOspREHXNEUuHpITrgshc4AEjQlbp8YRO/K
|
||||
V40cZCyI7BnJB9l1gT1kPjggvxYr+pAX+gEjpI/QwMIxxQb05Tu/AtKvca0G7L+6
|
||||
akF70g1ixW6QVaZH4V7S
|
||||
=Y1ZC
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Copyright 1999-2013 Gentoo Foundation
|
||||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-admin/hardening-check/hardening-check-2.5.ebuild,v 1.1 2013/12/29 17:49:34 ago Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-admin/hardening-check/hardening-check-2.5.ebuild,v 1.3 2014/02/20 13:11:53 ago Exp $
|
||||
|
||||
EAPI="5"
|
||||
|
||||
|
@ -10,7 +10,7 @@ DESCRIPTION="Report the hardening characterists of a set of binaries"
|
|||
HOMEPAGE="https://wiki.debian.org/Hardening"
|
||||
SRC_URI="mirror://debian/pool/main/h/${MY_PN}/${MY_PN}_${PV}.tar.gz"
|
||||
|
||||
KEYWORDS="~amd64 ~x86"
|
||||
KEYWORDS="amd64 x86"
|
||||
IUSE=""
|
||||
LICENSE="GPL-2+"
|
||||
SLOT="0"
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
# ChangeLog for app-admin/verynice
|
||||
# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-admin/verynice/ChangeLog,v 1.24 2014/02/11 14:28:40 nimiux Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-admin/verynice/ChangeLog,v 1.25 2014/02/20 20:37:58 ago Exp $
|
||||
|
||||
20 Feb 2014; Agostino Sarubbo <ago@gentoo.org> verynice-1.1-r2.ebuild:
|
||||
Stable for x86, wrt bug #499838
|
||||
|
||||
11 Feb 2014; Chema Alonso <nimiux@gentoo.org> verynice-1.1-r2.ebuild:
|
||||
Stable for amd64 wrt bug #499838
|
||||
|
|
|
@ -6,18 +6,24 @@ AUX verynice-1.1-build.patch 2525 SHA256 672c404f155a8be7e0ffa91997f25d2a13d1647
|
|||
AUX verynice.service 158 SHA256 f30efe2dbe6b87e637c458c7d618114b9cf9af5f3d12653de18aae9ff5a079f5 SHA512 03a88cc405c8d6fa18f1e523e6987b1455011cf17ff38f1e937d523b33d88cae839f256811b487ec3141d8b396a15b8af778998d53bf55dd69f6a6a6dbc6a148 WHIRLPOOL 7da0946a0b67425bf7e80b0d660bd5f9f601f86ac1364ccbd324bcfbd361e8721870f6d3112bfd593114cfeab6d6d866f5d648b06846f4f335705bbdd8f4aff2
|
||||
DIST verynice-1.1.tar.gz 37576 SHA256 5830fd4ac14ba3677e49159adbb7cd61e3d42d1f0b9aa73e4ed0aa154af6cd8d SHA512 731fa22162bb4f48b943839ccf8ccdc769587e323da11e4a77ad14539a724ffbb89e5f4122e1ab36df3306c507afc958d1125160d34d9cbf55df4dc69e4a0139 WHIRLPOOL ed1b7790aa333497e869830b2aacc3fa2289864e363bef3362ffee115c8afa0eb36b8cc29f255d87b929bb3dec3f8d9e839f30668c4572bccfdfb61f95da07c3
|
||||
EBUILD verynice-1.1-r1.ebuild 794 SHA256 e308327307afc1170a0b1c6e3e67a32d75ea46b546305e4bf7c47138b9b57c7c SHA512 7c7689fd41d0ee4ee3e0433e6ccd86d1c73dffffac71ab592fec76b792571bad4dfe81d7ec15b831daeda426f2a10beb93a338a437e31a5a421aa5b69feafe12 WHIRLPOOL 9b4fab2bb7bb4cc88eaf0e52584924af09eeb8f18e455d263ea9759f69ccef359b7afae65f884a23f6097bd12b141559b416777d7ba0dae5c8d665a2da2f2db9
|
||||
EBUILD verynice-1.1-r2.ebuild 854 SHA256 b489b5175b4eb7ed482456095f812906e743aebfd9968afd0595e6cbe184ab95 SHA512 bb19c618d3a026987a557de9e49901f0c9e1c69bcb2dff167dd28db46eb552e744ec29eee7fd74c4444276fd2e6a9d4ff9ea515e461c4eb8cd13a9bb063e075d WHIRLPOOL 119511afd7b148a8bd45b76c61e649196d08f7818c0586eb42ec36d18f981e8fbf03a203cb736a4f08da80b638c3642f4b2ffb2217e3f3abed11dc7ec340f9b2
|
||||
EBUILD verynice-1.1-r2.ebuild 850 SHA256 0ebda4cdbd0de4afee3a180c1d131ef4708c2d7550520319b2144fe1050c5c71 SHA512 a967695ee332be2611bd0e3f57e791807d0f2412b5e21429102ad2f18f9cbc97db567753dd261e0d937b6906ddf1d72738a5c1ffd08fa750a344dc26815efc7f WHIRLPOOL df645245b1ba9c3488cc02b51f8696a194d3d3c68ffa8af3bbf3d87f915cfee81fc697e5fa6a56f8e0babc46e4fc49d904f807bb9f5ec286bb8b7cb158070578
|
||||
EBUILD verynice-1.1.ebuild 1179 SHA256 4f7e402c954f441f235c7658b88ead07ec88b5682cd3d90a4f4c7084380fbf08 SHA512 eb8da360b867c27445e0035ff86428531714f0834448270509563c7a29c7e8d3e0d4fbfe25b31202960b2001faf07f57424d5e3ca5c1e8e4d9bb36c6b116e479 WHIRLPOOL 098cf696a304cd5c638d5ed087b1d7ab066d1ce3132181c3808aedf38484fd88dd4f2680f9d7f3804b4dc083cee87fd6e8f8f0000d2814b840ec26b86c2b9bc9
|
||||
MISC ChangeLog 2821 SHA256 367b8a8cd0fba3fc4133343258f14c4f821aa43d1c827dae5b52281797ab5eca SHA512 ddec4334c04c7a041c9e27bc873532e0890e73e5442e1faee7170fa9d18eedcfa431a8a3d9b277ab5debac130087ced3471235d9833fbbf224f16ec83c138edc WHIRLPOOL df7eb658d47a3e459d8e9cebb2647b327b87db0e78e985dfb30dae0ae54a52527ca500e79d244da325e3dfb61c4f308a18dba5909a1c702f31ab9d1ffd036a77
|
||||
MISC ChangeLog 2926 SHA256 6760b21d91c21ba208438385cbab3c80ce6a57c5f58c31e036dc57e10b300329 SHA512 3f9a8dda4c2b33fa9d4a4b8a4a4b4199698c94a27acd0bd4541e4238caf9b0612804823f22ff154c08edbeba3af11d305d66756c411595cd73752768fe1bec26 WHIRLPOOL 922d55750ab2b08dbc397f162f13ba262e72ae6bfe474b99b7d842be79dde3fd1a5315ca44726e837f61e0191bf3eaaa6147e6055653fc9758ef5a7d8535616c
|
||||
MISC metadata.xml 356 SHA256 6e8d66dd876aee03ea5a74b1b9d2cc15c528ff95b2b534719ea11fc8232cc86c SHA512 254c087a67c211201643cd084c6bf4391608e6d56ed06a2dbd58eee68408f8e0a8673bfa9a960652bd83372c2fc9457829f1c5b45d684b05d527cf8535421067 WHIRLPOOL afd49131b1444bf7225d09d842ed0995b885fab62970bbd8143f930fb9298d24a21dd7273abb6fc614653c5f3f397e15471a44a81704c51d0d045690ec96e278
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQEcBAEBCAAGBQJS+jPQAAoJEA2sAkrWKOU20WMIAKUh8Mkdt5PYzhWHGQWL8UI2
|
||||
EC0BdUzK/4UeRWFDLidM5H4pyfOHI4RiS6lEyvtsoHu1C5IaVw8Xcezz/H2cajW1
|
||||
bleA2cILIrmWWJZK48miBHnllCWXkussewa6sp6NdBx9Y9crDpSKWnZGTh+7mvnT
|
||||
BSQxrMY/czbbddRtl8t5BmOhBSXeIh9VuVzMORrL7VhIeS3SL6o8QbBhUpIGtiiE
|
||||
fj0mVmladpFGr1BecLiiBY34rwaMEicXwPrYXrB88fffvZCNQnSRJpleJK50Hxp7
|
||||
ZrHx5Lc2d+Y/Dfjh5iKTSlkVZEA0Ak/3K/bqEQoBvwDvE+LimOmIf9IOJBpeu6g=
|
||||
=kZd4
|
||||
iQIcBAEBCAAGBQJTBmeoAAoJELp701BxlEWfGI0P/i6vEaXj+yJXi001t66fyyIy
|
||||
zIBqzKlkO2CgAJ8YKg8fyzArFGyXsvS9A6POYteanvx8X5MUjNMUoqlXU428Wc0c
|
||||
XiFoDuJvKESJuMXj39wCZEvNRY6lFK1ZdmWb3PI3myB/C51fQuHKUYzbhgKKV+db
|
||||
YeLlfZJu1s/ku5X4DnwAo5goPgJRl4OVFZ4NIJbb29ZdjsdzhZFfnEQnRbZGqHEQ
|
||||
I14xLW2YqxBrKB15gQcA9XjKdBveciajJWptOZYD7ePHcFn2l+UB++QArfpFnEbs
|
||||
r4qjs2iQEPFWWAaYVOn5Z/28x3CoeF6P9J4NYM1RoZJJSmGvz2uhoqq47BE3XyZd
|
||||
FXz3NWDLU7dTV70I/JF9IW3eTSNOj4IOpuG1j3C6sptnLGoE6tmuj9JiReCKt/YS
|
||||
0pUAo7lPQybyPlyvWiGtmYjIzk6ZvyBQuFK0/Q9HJUNNeKsUDlJ3amScKAJ3Co7j
|
||||
2ErS8gfd4P3ZMBMM88WyvXuBTxJ2o9DlpytRfWEJYVNoIspfeJwxxk2gLP5GX3jT
|
||||
eE49qAjp7DP9CjGWWyx6aEoUde/18vhU+tEgAsim1kBpk8ob/F82WUthN7q386le
|
||||
63tgC5UQK1qBL8rtFNo+nzZC6fu5xyzV/HXVoPZv3pcoXJqKX15cKUPIpwyUvGGu
|
||||
aqywUCHrmr5C1AKc7OvM
|
||||
=Ripu
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-admin/verynice/verynice-1.1-r2.ebuild,v 1.2 2014/02/11 14:28:40 nimiux Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-admin/verynice/verynice-1.1-r2.ebuild,v 1.3 2014/02/20 20:37:58 ago Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
|
@ -12,7 +12,7 @@ SRC_URI="http://thermal.cnde.iastate.edu/~sdh4/verynice/down/${P}.tar.gz"
|
|||
|
||||
LICENSE="GPL-2"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 ~ppc ~x86"
|
||||
KEYWORDS="amd64 ~ppc x86"
|
||||
IUSE=""
|
||||
|
||||
S=${WORKDIR}/${PN}
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
# ChangeLog for app-arch/tar
|
||||
# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-arch/tar/ChangeLog,v 1.201 2014/02/19 14:49:03 polynomial-c Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-arch/tar/ChangeLog,v 1.202 2014/02/20 18:02:38 maekke Exp $
|
||||
|
||||
20 Feb 2014; Markus Meier <maekke@gentoo.org> tar-1.27.1-r2.ebuild:
|
||||
arm stable, bug #496212
|
||||
|
||||
*tar-1.27.1-r2 (19 Feb 2014)
|
||||
|
||||
|
|
|
@ -14,24 +14,14 @@ DIST tar-1.27.1.tar.bz2 2573070 SHA256 9b0fb3ce8512059337add0da5f8f0f7d7647f2201
|
|||
DIST tar-1.27.tar.bz2 2530071 SHA256 2238c5c63c7ecaccc962f10482d76875b45cedfed69138ed852a88e344af3c7b SHA512 7f9c9fa07f67c0a3ca7593ffb334db1c32206ee3cccb4484543b4c055ff3a4b72d46671aa534b4e754158653654ac04c9272d6738e7f06ab502b9c4c8d60c433 WHIRLPOOL fc296b654611545fd8cedabf52b231330371af7c396ebe28bd0c66633cb58f143bbdce4cf9d75e15f770851ebd96426781a050abf770a1d0dc194819e460637f
|
||||
EBUILD tar-1.26-r1.ebuild 2290 SHA256 03651edf07bc9cc141a524efd006f4361c4cd79b1d5796dd88ebd3e4fd25eb5e SHA512 346ad7e358e2bc5337011cd076daaff887ed7c83d1bd2c411c409b7327d35dfeb01c4be51102623cb0e004da0c4a24393746b0d8260799e86f5de94ff633958d WHIRLPOOL 492c281e5e6929286c01dc9ecbd37b9de72947d3701237e34adeb690f1cdc84a559fcbc2f346505a64ebc4ae1e25d6d4f6882df03495dd767159e0e04ea89100
|
||||
EBUILD tar-1.27-r2.ebuild 2396 SHA256 d8c4d189877fb41b7d4d6cbbc029d49bc81e5700e09a792b5a9e9fca53c22422 SHA512 7cfe91695ddc7ddcec6c659a86fc4ff52f30fb55d939264de655b139ef3f74ddd365776d24680893c801c6ce1278f3647613c55a68a3889cb34834355a5ab234 WHIRLPOOL a0eaf2b17d7ce1c4cbbab1f20797c79a128262edcc9bd1100ce01d3a1b011c83632714fdef70a3a68b392c29e3bc3980e835efc2be3003f60ceff51e22c4c211
|
||||
EBUILD tar-1.27.1-r2.ebuild 2457 SHA256 a47446a10576a395fe7dece987039c8afc01df56e821102acd9754ce2256a781 SHA512 8ca6731b81d0a85f44a30acddd9bc2e0bedca30ae89df7ca2edad1957db9509de7c5a9ca8282a9fdb76ea2c85d41b3ea559d7d2f7a5241824c93d124da0189d7 WHIRLPOOL 4db9b338a6311682444d92138ad91cba9688d314f75218f07e48caf396e4cf4b912cc94e5da02950bfed00a52eff7d2325391c70965faecb8e4723d3de37ce1a
|
||||
EBUILD tar-1.27.1-r2.ebuild 2450 SHA256 bab15cb68783492f9bb0e745cff36977d13d10036c40e872a167e87f7ec774f2 SHA512 f09972e4672613e6095778898c1106e04596ceaa3dc8f1239a3897554548ea811287a478170e04f6a4edc9baed96ac2865399715a3ead7bbe6292a27887fed84 WHIRLPOOL 16d9c95f433d1c63894cf52e7afb3e9c57cef7cc768b5e360ed2424532da4eb13f2cbc8602131177cc5856cf3b57beb3111327891febe39f7de607c7a91d812f
|
||||
EBUILD tar-1.27.1.ebuild 2322 SHA256 e8574b521187193a3877aebe38d6f2a62c3156797c0eef7edf2abbbc3cbba4d6 SHA512 c7c52f4548840d855e662fc09337bf73f1d59a608abac029b94eaf0700a8bec3a2587fd0e3f0acae0d9f2c3e205035c7685413d78e6046e4c013504ace9bf3f1 WHIRLPOOL 4ba5a9baf57af269bf3e436f0a9fd328f195e9899f67142d8dd77c0fb910be66768d6778bae47cc971a45f05c1418acf99bf8c8efd6e65d93f508d5839519e4b
|
||||
MISC ChangeLog 30433 SHA256 de2ab6288f426fe66a580a6ca643e3880643cfe787ebe3971aff360a5e6d40a3 SHA512 0726287b396ee9ef5fdc6ddd50a1efcff521cb0877bb7ff7a1c78dd73ad0d1d9233db8eaaa45fffeed1a1bebaba123c4ee4c457c4005ece7277376ef0d551b5c WHIRLPOOL 63fe3612aecf5a5e562b19cb25a07c236afad10e8e3adaf0b33d3fccd39a9e7c6514539d7c3a845dce8d0361092b49a363e57f224f3857f7411561d06140a044
|
||||
MISC ChangeLog 30524 SHA256 c5618fbc249f2d5c24b297136862b6860d2dff2ccf92c4254d007707f78cba1f SHA512 5218477e32b68f9d38f9247693ba61582322cd365d43e79a7f1098518262fc5bdd1434794588a6372ced8b560e724f7c7d19a3a3a49b234fc0d383d349bc4faf WHIRLPOOL 5ce3480eecace2c658cdb477a9b3711e896ef8aef225a36ea594eab93b8c951d55ac84b1a00da8e2334fa63877e0463fa18c814953ffa2911a5819cf5b2536df
|
||||
MISC metadata.xml 298 SHA256 776c92889812df8f8dc072ae2ac1d7091f1613afc6332eccd0e20a0d90caaf0b SHA512 9e7e0d3343fc95c9164d7b5cd7bf9a8cc21d5bba06af0ce19f693f8e6039415ab472411fba602fb99a1728529774cd85e828311a77c34d1f157cf4fedea59f65 WHIRLPOOL ddeaf15e3d36ed3c9e0ac13b17e49a187d0855255f38bf60a3726bd10ebaddbfc269a2101bbc64d4c8f69491228165016b2d76b15aabbd9bc3a0bd1732ca8f2e
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAEBCAAGBQJTBMRgAAoJEPiazRVxLXTFgikP/i4DgSy6FvYAYXGmIkx9s7Bo
|
||||
EPwJql6fwYVQLM4ZjjdDtyOOuAx8n9ybMTSpUtB6mWvne8nkIfJDtEwwxocfMpRO
|
||||
8ap8h+uEhTHNggfdfSHh2peAOJ0Y6U8x1LVsDUg+q/5oYxC3rJYB2QiLDE7rWsTM
|
||||
3MH5d9ad4Y/3ZkloVdTKZAEMJcY5QOQ9mjN/aNR7qZOKOsi29WVhSSeHLimiW0YT
|
||||
2evsjv6okPSuJRGf0iZrSpEuyGLbyXo2yERxkLdd/gEvJoXj0iP4e/00es8j6kF0
|
||||
5ouXXmnhFXe6C/ZdXclaE0ljtkzawzKbF5r/D986ouiqBO3gu+P9I2dMaTHjcSp/
|
||||
Q+v8x/KfvW01PCowjT6lvUb5795sY80eJ5HRU07SDkGqN3nJtwMveBW1Uy7+wn3F
|
||||
8XgY6ktDwUQ5k89TMnDN7dk6IUiDExn3wWYHd8iKjj7oJ6TvhaSAH88oZes/q3xQ
|
||||
vsl3cA4WnuXFroFK8nrBINJzMYd3U9Ds/y8AUubBEOFvQfbHiAHDXMDle/ulYiMn
|
||||
e6rD1ycv2iXu6/SUJH1unjO/2OGYMXQU3Fic/3YOmdgyqwTllRdpUG9uGHft0iQb
|
||||
m3NnoG/INRruO5y2bKOv1M82Ju5tW33Efn9iFYzSN34B7swtoXjaEl675CKqYps9
|
||||
gJDGZsDaeuIq9sk6sqoB
|
||||
=EcIN
|
||||
iEYEAREIAAYFAlMGRP4ACgkQkKaRLQcq0GKvOgCfe1GKTw17f/dUg5lo6Fhj0FMs
|
||||
TgkAoIeJWVqcrZqyga7wK6cDEfiXkHwt
|
||||
=EJnK
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-arch/tar/tar-1.27.1-r2.ebuild,v 1.1 2014/02/19 14:49:03 polynomial-c Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-arch/tar/tar-1.27.1-r2.ebuild,v 1.2 2014/02/20 18:02:38 maekke Exp $
|
||||
|
||||
EAPI=4
|
||||
|
||||
|
@ -13,7 +13,7 @@ SRC_URI="mirror://gnu/tar/${P}.tar.bz2
|
|||
|
||||
LICENSE="GPL-3+"
|
||||
SLOT="0"
|
||||
KEYWORDS="~alpha amd64 ~arm ~arm64 hppa ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~ppc-aix ~amd64-fbsd ~x86-fbsd ~x64-freebsd ~x86-freebsd ~hppa-hpux ~ia64-hpux ~x86-interix ~amd64-linux ~arm-linux ~ia64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
|
||||
KEYWORDS="~alpha amd64 arm ~arm64 hppa ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~ppc-aix ~amd64-fbsd ~x86-fbsd ~x64-freebsd ~x86-freebsd ~hppa-hpux ~ia64-hpux ~x86-interix ~amd64-linux ~arm-linux ~ia64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
|
||||
IUSE="acl minimal nls selinux static userland_GNU xattr"
|
||||
|
||||
RDEPEND="acl? ( virtual/acl )
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
# ChangeLog for app-crypt/p11-kit
|
||||
# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-crypt/p11-kit/ChangeLog,v 1.55 2014/02/18 20:56:22 pacho Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-crypt/p11-kit/ChangeLog,v 1.57 2014/02/20 20:39:48 ago Exp $
|
||||
|
||||
20 Feb 2014; Agostino Sarubbo <ago@gentoo.org> p11-kit-0.20.2.ebuild:
|
||||
Stable for x86, wrt bug #500718
|
||||
|
||||
20 Feb 2014; Akinori Hattori <hattya@gentoo.org> p11-kit-0.20.2.ebuild:
|
||||
ia64 stable wrt bug #500718
|
||||
|
||||
18 Feb 2014; Pacho Ramos <pacho@gentoo.org> p11-kit-0.20.2.ebuild:
|
||||
amd64 stable, bug #500718
|
||||
|
|
|
@ -14,13 +14,23 @@ EBUILD p11-kit-0.19.3.ebuild 1000 SHA256 e017919bcb7b148547050c59b1d89985285f751
|
|||
EBUILD p11-kit-0.19.4.ebuild 922 SHA256 c909352f236c2a44d4c7ed1037e86d3bbd852685af89220bf509ecf42c4c3acd SHA512 1f2683a49e209bed33bad63965404040cdc7ffb0bc10ac9b7936c571b648e1d266f77f2ebac5be6d019237bba18683abdfbe7282025dc6d92d0ca08c774c1de8 WHIRLPOOL 5357e28da9260c80de9f77367b21a7b5fc0ce9c03e5fc7961c845d2e944eeb9a60d9d7bf31435a69d6999c8be3453ced1f0bd4df3fba746035f677e62fc5a37c
|
||||
EBUILD p11-kit-0.20.1.ebuild 922 SHA256 fda3f1a8acb7377c48c798de38bbcccb0405c7d5b1bbc5af507628df96e003d0 SHA512 1ef5512ac6ad9256e57f1a9cdc9a4b2396c6e529a3530d9c03921122bf9d69f022a5b9b44d04ed8c194f8d7e3d0c9ef245a3511fc6cd1159a1ffedd9dad14328 WHIRLPOOL f31cbf5b74a139ef95a554d5f88e062d07ce47c5f163ea8368ce5e217aac719176335970476776026c88a5443ce0b3b2789d5fb3e9daaec314126df13e2f13bf
|
||||
EBUILD p11-kit-0.20.2-r1.ebuild 992 SHA256 085290dce7f62db592cf17a2f55d88b1bd42446275c3518ef74ebb17fecd8547 SHA512 7fd9a38f39131bdade94f8e682774cd9bec36aa75e113c810b11a9db02039860c6be3c12b900cbd75ae12a8253255abb18fd58b33cf1c75ed28e30a98fd30de5 WHIRLPOOL 5c1289a45da15268b4a6814835962d4dc37c67a36d55a3c125d92041e566422d7117ac417366dc0afd41b1c97368e5ec4ccf413a5896f5770ed155112812a558
|
||||
EBUILD p11-kit-0.20.2.ebuild 916 SHA256 f51b56eeaecfdfd053706f769d8ee28d553bbb855330b15c523d43ff17be64d1 SHA512 ff1c227776732f8196ed8f58f49e649817ba26878f33056d4ffc6c92c7919085ede1d6616ce8a114f66ae58d87027214f711d0dd0cd8d9d4e3c024fb61ca69a6 WHIRLPOOL b8ab38a9035f883e285868b583f1167cf481066992fec10bfe4a8d95901cdcd17f6d215f7355c640ba1c7f70fe56a906457f6d451cb4734318a98d24046b87ff
|
||||
MISC ChangeLog 6764 SHA256 7d6335b3cc9dd893d0e1c9b9157afc7a9568a82961054fb62239a6ab368cb3c7 SHA512 cd23e7f8aa00ee0e140628e8b0d9542ffda5e7491ec036fc1c549b468fd391fbc1d77e4e1470cbd410b337aa233ff4dd7d1632d8e1620dce4729514dc26fccf8 WHIRLPOOL e9d84e887730dd72177d912e4d008414d99797eeef39d8b6c21cc4db0e031321ef965b695addc648cebe7f656b3e9417715ccc2cb0438b604ba1a7df892534ab
|
||||
EBUILD p11-kit-0.20.2.ebuild 912 SHA256 f61b663c8396e3442e79ee531a77ef9f7e5a2357572d9a28dc4ebc73a0ac53ab SHA512 b7142639d34e7174eb89b2f2a68b4550ef9a823983227a66455a9522a325a4c5aa502cc6e67fd3e6cc67ab3d29415442419105b59e42f27a9866ca24b874b9f7 WHIRLPOOL db7c1a918c1b31062f1b995c82c3aec11a8c535f1c2e316a103c336dd33f37605efc6491d702ab792f9ac1fc0a728c4f2bf33b43d86d2d8d2719b015555b400e
|
||||
MISC ChangeLog 6974 SHA256 5f3205bc8f4739646ae3272725637faa42855e9d4bd8157536107d4bb3ba7b01 SHA512 4a30f9b21494be7de67b73c5a4954995d77e98cd63f065a1f83c6c3df78270e2cec5b1021716f18af258ab4f725c06364d7ca99c5ddf8ea8bf90359c499dab4c WHIRLPOOL 386181ce4660e47922c901f32e48c869fa88f038385c7fd8f2f62d659cad800944fe9674db94fc404843f3bae40b15a4af7c3853b5626b05b5a8dd6b147bc645
|
||||
MISC metadata.xml 293 SHA256 24f5bd96c485f51ba93ed3d4789f0455e6c1aa4d36d73ab1b8cedbcaff194d3a SHA512 fb812d3b9cca8a2968d511aa790a4b84cfa2195a5fc91d1c4aec2ea6ffbd8fc4365c3eb19e8fb288b183b6407964c3ebef54d52e0de9ea568933f9edc5d0651a WHIRLPOOL 71a0af9fe956651660e65ee58f9804636a0ab0e04d5b77400ecae3bdc1eea56de5a40cbaa018fb6a9bd9b64d1f49832c5f57c4630fc577a4ed128959a41597db
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iEYEAREIAAYFAlMDyPcACgkQCaWpQKGI+9QfRwCeN9Zyx+40Br5+sIYN+L9bXg4m
|
||||
GloAnRGz+VaRZkP12TiV6LuODnRuyoRg
|
||||
=F0ru
|
||||
iQIcBAEBCAAGBQJTBmgWAAoJELp701BxlEWfk/EP/R2yfNQkE3e7SmpL/YQBEb22
|
||||
LzTaAZ/gKWaaisk5mlgOoQubCr5a6DYUstMkIcYFlQKfGT5pOtU/zWrELwtasqy2
|
||||
IhdN/NXBkbtlY7y9m7XwijooclEHXDxm9JXrtqqeFgOzrEupxKqIdzi5CDUymclX
|
||||
VEQ7Y0LikpR1a4PwiQ78GwQXa2Jc1HxnZvCz0eEmXjCdTY0GbksED+Ve2FhHXCnb
|
||||
0VWlvyJs3IajIgUkfr78v9FDxsJ+GRXyCnUmqNC0TlCEYw6/RLEUj4HPBN9QCCy3
|
||||
3imnuWE4CESpJkutHPM/pwdIVCnINuyuB3peiBrZnP710VO28fKtr3VJZawOt10G
|
||||
QzmtKD3H9sJkIjdnI33PJt9aJbM1Lxh/sN2vMRREtW/6fRKdmlkXL8NCFJnl9suU
|
||||
ne76yOsyWnxN00Jt7OOa0+U2/t8F4uO/f1ql2kbeaEKIQ1EVqkqPxgQT2t4L+AyU
|
||||
JnAMESeXeNt3RfwXffSbig9cMX7acRHQ0sXvbGfZQlfxsDy42401Anlb7QrENblH
|
||||
+IFLb3bT4DmwXMrzihFV4m5CLD0V+SesizQ2CfI/MGZrBQI+MWERdFWwnQiL8Xc+
|
||||
eLI8lKX6V1JrLEHIWmiYCoz8XLku2hQCC55qYoqREtNqDonYQ85qJ1m0dG5ZF7jQ
|
||||
PhO8HR+vXnHhGcibgbgs
|
||||
=VhxT
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-crypt/p11-kit/p11-kit-0.20.2.ebuild,v 1.3 2014/02/18 20:56:22 pacho Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-crypt/p11-kit/p11-kit-0.20.2.ebuild,v 1.5 2014/02/20 20:39:48 ago Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
|
@ -12,7 +12,7 @@ SRC_URI="http://p11-glue.freedesktop.org/releases/${P}.tar.gz"
|
|||
|
||||
LICENSE="MIT"
|
||||
SLOT="0"
|
||||
KEYWORDS="~alpha amd64 ~arm hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~arm-linux ~x86-linux"
|
||||
KEYWORDS="~alpha amd64 ~arm hppa ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc x86 ~amd64-fbsd ~x86-fbsd ~arm-linux ~x86-linux"
|
||||
IUSE="+asn1 debug +trust"
|
||||
REQUIRED_USE="trust? ( asn1 )"
|
||||
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
# ChangeLog for app-editors/emacs
|
||||
# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-editors/emacs/ChangeLog,v 1.606 2014/02/17 08:18:21 ulm Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-editors/emacs/ChangeLog,v 1.607 2014/02/20 20:59:41 ulm Exp $
|
||||
|
||||
20 Feb 2014; Ulrich Müller <ulm@gentoo.org> emacs-18.59-r9.ebuild:
|
||||
Fix SRC_URI, old-gnu is not on GNU mirrors.
|
||||
|
||||
17 Feb 2014; Ulrich Müller <ulm@gentoo.org> emacs-23.4-r6.ebuild,
|
||||
emacs-24.3-r2.ebuild:
|
||||
|
|
|
@ -16,25 +16,25 @@ DIST emacs-24.3-patches-5.tar.xz 3260 SHA256 ed9928b23a8b73b3ad265ba6866f609cdf6
|
|||
DIST emacs-24.3.tar.xz 35565352 SHA256 70aa2942e9ae689ed17eddedfca5027c364ffbcc8b59968b1645e935f4c7058d SHA512 a1300fa10a9fba2db9735db3d01382bcda89ceec033976c4622796dfdf6d2748ed5fa73edf229182b368190c8acbf706810dd5f344542d2c0d294154bc2d0ca9 WHIRLPOOL 687ad4c7d69b41884bf28269bdea1808e03cdcec5a5218d0bac23c07cca3ced341ef98b4d5892149e2dbe899774a5e60edde9931d6c0fe41687995f530fb61d8
|
||||
DIST leim-21.4.tar.gz 3291433 SHA256 db24946985dd644bfed18815d6e991dad27f8ab1fd5823dd6dc4eb8dcd04333b SHA512 c361996f7a3fcc550e7af30a7df3f692071ded2c9dce998e72f537b0e8011f319cfae1742d0be463608a86852046cba23037a29c3ecdcbaf5976807e1d1a1e2c WHIRLPOOL d7f25d5d491f323b80609567ce5cbcb5f20109cdd4671e9972c79279a3ca5338bbf67d35ae8f0bc627bc06917f545d71ab1f66a09c647f47ddaea26772bfc5c1
|
||||
EBUILD emacs-18.59-r8.ebuild 4717 SHA256 c02f78fe6fd68875a658b7e50f5587e449db5586237e83a3242dab206bb1c5ce SHA512 ed924f35e1eda58dbfb807f61cbfe32bb549bc311662e6cbe2394dd64faf7939a23216ef9eb4d8c3f723f9ab80938556923bf385f739aba7bc8050bdccdbfe5c WHIRLPOOL a3fa2c4041bf29c562d2e18664ed7c4b2659487e0d5657aefef3f1638e5f1a8d042ea5b20ef4a8e73385b83331a2559c07e75dcbb9722a0b3565c4701250e289
|
||||
EBUILD emacs-18.59-r9.ebuild 4766 SHA256 9f98a015268909cb72d1249ba03be2e8ce50cb287cdc3e98fd14d8c55ce4703e SHA512 4d58e5b85c62504cf1c1ed1f3f0b65f1352ee7a9128bfa3f81f4ee556cd473a173ecbf0d3df8d15a33c54f2f6332e815dde837572b8d41e99dde47ae81e6b271 WHIRLPOOL 010235119630bc118128713defdd390a01263e31f7908fea924a04cd7e2f0ca7398c28519c5a0bb6e519c02cd35b21450f6622d0bd13fcec98f719b923c19478
|
||||
EBUILD emacs-18.59-r9.ebuild 4771 SHA256 861bf1a45fa18686eb3d221b8670e9263ef84018546fd26ea8ae7d9330582460 SHA512 5c7b2835a05d6dcac87873856d1471603f80fd0307c4d8cb1c7cacbdd3543f2156c89ff6ebcb85a0c6268f75115afa06d0d03adc8272b08e2fe0589671828456 WHIRLPOOL 817e9454f4afb7df3f3f247cb1f4f0db3daa3b82462d5839b742a2b34b2a3566ac60bb5c7ecf18df548f5cd9a036b32a9f656bdce471b4d4f16ac7f7c418e714
|
||||
EBUILD emacs-21.4-r24.ebuild 5286 SHA256 564082d9d96421342ec92f1d303ea07fb44ccf4c10aaf0d746a4fe8466ce7f74 SHA512 dd34062685d7c81e080d1ecc31de6c2da5ff6bf1e8f86794724c4edfad5dcd325e6f10e90f96a4700f48186bb4c887a962322a97ef15f57544aaab3250885b26 WHIRLPOOL d1baaf141b4833d23f12628b21b168f624a3f448b05103f123034744bd3de45d209369d6c3b91f038a31511e19990eeb0c1ac02ddb6da28123080726a579195a
|
||||
EBUILD emacs-22.3-r10.ebuild 7738 SHA256 5a219fa5f170f33347f07f4fcd8f52e8290bb3cd0c0be2c4abdadefd311511f3 SHA512 35a1450f8cbaeee5a14b7a8fb5e428e473b86e3b31481fad0144168a07b5f3158c9b2c3e68e244f1c14b8b044b1d0736d66e249239482ca3aa4b8be4ad8cfdbd WHIRLPOOL ace481ef8a33d517cb153545fd310761658d592da4232ab8d58c79e4c42bb742436a44fbc99ad91f472b9586bd62c20549347cbca7418c133a7a5b92ee66ba0b
|
||||
EBUILD emacs-23.4-r6.ebuild 10801 SHA256 d73125c366b49db835f739fd8cbc1b6fcc3fb9e70e13eb8f36843f21c335d7d2 SHA512 bfbff187751415fc6ffb23932ade7d66950ad8e0420a8c297415e7266010889f29beea3178e6a84a9185cd665d01c437d56cf49eea5fd580765a57de83b19225 WHIRLPOOL 46e90e02677419356a92e7c13c51d6ff7f11b5e12c117c00628700d4def529a9958f661180c13bc9b616ba4abefe68c07451ca8f278130f80faf155d3c4ed26c
|
||||
EBUILD emacs-24.2-r1.ebuild 11004 SHA256 e0b04d9da0ec883437134abd0253ea6ededef096bebe5c76a64883489eb9b89e SHA512 d3a40b1c261d0b0c217d6fa1b4874781b78c0c27e6f8662f4ce0f279d20dec5e1b32ba566cf56df25cb8f7b1bf72b54a7c4af478dc95cf948edb77ffab3682bd WHIRLPOOL 22e196214a7bc2ab00b40711d6d51bbac08cfadc2e6c9d5778be02b22c406d3601238870172ef28ae2dc47fdef5f86d35ff83aea6d88ee23112b06f2c0fa2dc3
|
||||
EBUILD emacs-24.3-r2.ebuild 10786 SHA256 a6f2a4ca08e974997d213f0a21fe0b905bbf67e4b1011310d679fd05c0cafe06 SHA512 17a0c52e9fba474ba20fc3a6afdce26d41a33ee072f4402c3cdbd704ffa2163aeec3b7cd90e223f7d2e6abce626744855bebd667cfb6a906f9276c400a9b40fa WHIRLPOOL 56a8fbcafd7cc74fca1065680468073cc2785d17df9aaec90347e5086481f0f0403ffadeae8186bfab9edc504a04dce04617abcfbb24b5b9dc766d878eeccb89
|
||||
MISC ChangeLog 83918 SHA256 a5a831ed084b21fc113fc497c037d1e0284306c3e4a701e7243f555879f524d7 SHA512 7b0173d8841ead8e695ee7a1fb072f6dfaf310e42f2022bfb033297656fb365504de3d9b31fb60b1887d02ff6c99143768a6e87a3cff5d52afc20d7b8b745181 WHIRLPOOL 394b105f05c164e6a4e100b50ff9517a71c7d482cfb8ac34e47ffc22c894a89ca69ecc0ecad5ab8c13cb8c692a5157171f748dedf71340d5008b269dcd1f145a
|
||||
MISC ChangeLog 84035 SHA256 f3304e47aea2c1e843be8efb9862be13e79cc38e15ebe2d7697841c2a66a373d SHA512 babf388220c16d605c35927b8f8433e60b94d6c590d5079af881a596c0b4c07c0a36914d6339976f9e013839a5b53d53b7189ca2c66822ea6eee9ad8006c97a6 WHIRLPOOL 3f676084ae387ebd7e7afa1f1a7ef6846a73453a25f4ca04d94d4aef24535b940b29b137d864f98165e11696b4e1b62c42a833e97c2b2b5376678a4c356b6f90
|
||||
MISC metadata.xml 2554 SHA256 94ab92fa323dcb5747564f95bfd1e2a3eca2511cd3e95b48e4ca95ea40ac8238 SHA512 24207b2227969f1d87126bbca5046f10f848f22584fa9c2a23a88ebb854e4344cc564902be1e6e1b86ae8b9da416f65ccf6172d4595633d6063f78893f9ae0c1 WHIRLPOOL db5cb9f87e4804152bf0a41807497733f4a4c382dd634b2ba7cc41fb6bda07191adca7e68b11dcac79d681b3b17dc9a4d629d0b8d152cd8c148883e754385155
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQGcBAEBCAAGBQJTAcXbAAoJEJQzkH1pP7W429ML/1geNdTi44ebeDMVqXXmpKDa
|
||||
r9tGyGbEncbdDWFWXMiG0ilnDSmdMtVEVEHXanAvCEtq59F13YTpUJy1bdfGPwOs
|
||||
DamDc0GAH4G/+rZw1TFl61p4l9iGtp8I2ZX+n52bI5MSRH9PNObOD30LoJfvhU4c
|
||||
W68fvnL0QcdPDsGHNKLKz8AtOVkCOSgZF71EqRm3+OpRqy6thvcYofgPOI3Rj1RB
|
||||
uqd3EbCQS8xNZGl3HCbmFOday5slLvBXi9fFwMnBdeCdFcD72b41Jv3uFyNaYVIV
|
||||
rXdzx2TkR9OxlFA5eIJxA+wZtYHvrfuQmsrmhohtZGUmXmZuo+BKBKglJKi/m79q
|
||||
M84gygsSv+fNDliQaou8vk6SCg1ZfKCIjNnKhWlyfBqbFBP+rAsfXH1BhXuPARw/
|
||||
UPQJqLXbdakOYfvKL2iyyPaqV7+GNfjFlBd2bQYXI1DdXST809w6K3s1nMzYD6M5
|
||||
/mNibGE7IjMhNd9i8xHFC8IEQME+nHQuwuoK+5zdyw==
|
||||
=9sWD
|
||||
iQGcBAEBCAAGBQJTBmzVAAoJEJQzkH1pP7W4qZkMAIIcHwTuGrmqqbtFRvAp1SZp
|
||||
0PAa0za/Fs8TmKQWDjVbouSikCfwWApWWLRtNXSKj3JWUt6LGiHWg1XT/OkUnmOI
|
||||
tZvIyCxUSNUC4xaP0EdMrMXZF5sfyEvGI8jJyXlEvU7Uzjva94COIa9bmOSnKQDA
|
||||
JLIcKeKnNETcF68CwfeJDp0bs3XfqyG9NygwJUZROpRVair3SsWg5K5ggu9aI/Ya
|
||||
elbdvtnBkFxlJ0/UgrS045lH22BPzIPbhnSCwOcxKhoWzhBG5ZRNFzTHTY4vQxN7
|
||||
dnk4yDf1cOV+BDtJ3/JdVMyZmN1kVeZ0V6ruDLaU4qlPUzDKWrKfwcDPlJLz0X3D
|
||||
pJ51xHv51HHy/BUXVjUv+RZRQhH0XaZg2Fclgf1kJPY95u2R0coeRAnDIejrMYAv
|
||||
qFxEnAn/WK23y5wINSXgRLir3hxYo3jInABKLu6hF0lGU3V4jnck2w/vSTomZq5A
|
||||
Z1e7ebiL+Vot1xEE/4gGwc4HR7xG6ecPjJYKTRKIiA==
|
||||
=2z9J
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-editors/emacs/emacs-18.59-r9.ebuild,v 1.2 2014/01/25 16:11:17 ulm Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-editors/emacs/emacs-18.59-r9.ebuild,v 1.3 2014/02/20 20:59:41 ulm Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
|
@ -8,7 +8,7 @@ inherit eutils toolchain-funcs flag-o-matic multilib
|
|||
|
||||
DESCRIPTION="The extensible self-documenting text editor"
|
||||
HOMEPAGE="http://www.gnu.org/software/emacs/"
|
||||
SRC_URI="mirror://gnu/old-gnu/emacs/${P}.tar.gz
|
||||
SRC_URI="ftp://ftp.gnu.org/old-gnu/emacs/${P}.tar.gz
|
||||
ftp://ftp.splode.com/pub/users/friedman/emacs/${P}-linux22x-elf-glibc21.diff.gz
|
||||
http://dev.gentoo.org/~ulm/emacs/${P}-patches-8.tar.bz2"
|
||||
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
# ChangeLog for app-emacs/css-mode
|
||||
# Copyright 2000-2007 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/css-mode/ChangeLog,v 1.10 2007/10/29 14:13:51 flameeyes Exp $
|
||||
# Copyright 2000-2014 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/css-mode/ChangeLog,v 1.11 2014/02/21 00:10:55 ulm Exp $
|
||||
|
||||
21 Feb 2014; Ulrich Müller <ulm@gentoo.org> css-mode-0.11.ebuild:
|
||||
Update ebuild to EAPI 5. Specify LICENSE more precisely.
|
||||
|
||||
29 Oct 2007; Diego Pettenò <flameeyes@gentoo.org> css-mode-0.11.ebuild:
|
||||
Add ~x86-fbsd keyword.
|
||||
|
|
|
@ -1,25 +1,22 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
Hash: SHA256
|
||||
|
||||
AUX 50css-mode-gentoo.el 206 SHA256 8d82f877db8e6a6e136306a6d258e0a0325c4f949bea22f86b485a5f73dfa1a6 SHA512 a6491a40ebe653bac259b8f5c2b1e552b258511d0c87b4ce0b99e172c16ef657efd797924f5835e1760958b9be9ce0eb090cdaded93e3c785ba78d84539298d0 WHIRLPOOL df32720412c25f4437f215037b258f619b6beed14c0f67054879b6ee5794bdf93fe6c6b23d8bebb3f2f12b6d2197067620cd893f6c967d26711fc2e551216c38
|
||||
AUX 50css-mode-gentoo.el 171 SHA256 1f48e8d470f9a8e8de545a5c10529beb7a9265f17671bd45018455783d1ec8d2 SHA512 18713c42439aa4d076b7154035ba369060bfc8a0e98e845b7140e137b05ed0aacc2a25ec93612e950fe930c5605d6ea909d5d1ed79433d1472f357bc272ce96e WHIRLPOOL c9c97b77bd3f8aa00522be5f7b6e752ad2061f5c32bf6d2d5813fa2e8cc5862e93795fa442f9934272bf70499b2679d204ed11b373bf541499db68e25fddc8ff
|
||||
DIST css-mode-0.11.tar.bz2 6848 SHA256 f7980d13a2d5ba2ac6873fdc2c7b54db5c13e93294a2c1068b4b04e7b6a2f7d4 SHA512 b93574fde8bb24ffc4dac6ddda20db3ec3c1834c1201f250f24805d31c7972edc2ffc157e7717327e7baac5c71a1d943a9d80bc7bec96be99c44cd2ab16e0e03 WHIRLPOOL e9036b4ef8604025aa123fc56c51b2171f0027d493134b89a96d2eceef3b0de3668c5ced5396c684b3ff8cfa595eb21d3ddd491a3c2b45f486955cee4f020b30
|
||||
EBUILD css-mode-0.11.ebuild 780 SHA256 1dd1224e15dd85229c25a03167364cbd9127fb5e6b9c62ce412f0bd449ac4019 SHA512 ff7046090d5f5c98c66dd1042b6090f61785af97a40443b97b0828109f343d29b0bf0321226b4b1d16aaf8d130214a2dfc26d901814f928e717ed0418ef4bf2e WHIRLPOOL 4667e81b1089bc878aeb5eccdfe050d69842ba419587628706308984b4c6bd6fb0878332253383ff0a6bd7bc25fe98b028938b5cac78037514a7f09280a4371c
|
||||
MISC ChangeLog 1039 SHA256 73314476f1279e6275fbd90e10e07e66869e5fb8befc075ff27b29267161bd36 SHA512 d475bab022a795843ec65607d2b4585667d0e9d09bb2acd03308bd9ac59fde8e1497c9d95a75a13040ce5a397dbbd02005465853075774a2a84b91c6026b78f4 WHIRLPOOL ebae4293841fba7501113c32512e709212d47c646f9f1884e1084f5215b1ee940e32cca6be61e41af0a2151522ed7dcd9e07a340ba5f1e28f526f5fa84a38020
|
||||
EBUILD css-mode-0.11.ebuild 705 SHA256 116b93f10ae4e58ffd06e70031986bfef44cf8df40cc1950bec3f0c6485d67ae SHA512 39651313e542ef7c0c9b814c811e2f04eb6637445cd15d5932be5c3fc34bcd76d3451ae499aaac5324dc4aeed285e453a36a6960d36c9d32dfab6aeb9c854f98 WHIRLPOOL 37d0e752cc78f9ff8b4195e66971d2cd769615358641fc6d7a798dc12265e5fa47c966b2598631c500a9c16fb166fa3cd475ad32e3e105576505a374f807a1c0
|
||||
MISC ChangeLog 1162 SHA256 8f0df2d11ced4341266bd23eaccfeb9ee1b0ade80e6ecf8f2c2a90934def800a SHA512 4acbe48fcc6c9838ef52ce084ef259873cc2207c33cd61555ea3e463560ecc55d250cd7ac6ab67dc39b70407f49baf814a9b70ad6efb8a58c147b52df73a56d9 WHIRLPOOL df298f1a9e6c8f574a58ec69d9122808592b94b8c014d76a0cb878e480dbd7570cb7ddf129e6eccbf55020f6726ee9e2d0ba4c9a1b4fd79d4e41b13f47825675
|
||||
MISC metadata.xml 158 SHA256 1393bdef3a74343fdb40a112c7096a1af16f67e7a43413250de28dfe73810eab SHA512 e55d75feae933ba948ae987305ea58e36f5880f18687e8acaf91237e33e251be3ecfd5be27048f4907ea6799e0bcf784b602096dd7e2bc9c450eb5e2bb6a73d2 WHIRLPOOL 1d1676172186235a3e99ca1d148298fb24f6a089f9b7908b3c28c246c8854969835fd3742b8b81e0a30b63d76ee0be0c42bfede2416a30dfc3c8b915a147340c
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.19 (GNU/Linux)
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAEBAgAGBQJP9ev6AAoJEDxpGckxwJCB8LUQAI6I15UBzICHjJ6OqZwLRWbw
|
||||
9qQT/HzZn9yAlzISO53OM1NtiZmYZw6n0X0mVnBqvVnJsqVjZxWHeDW6AlgdS9Jx
|
||||
+JiNW4bjPVeKDWpT/LDnWRItejAMV1QPQ0Mz/zxZj1Llt21ZuI/ZKxg2HjW1MQtu
|
||||
dUBDtjuxFfavovcGHHwYzW1Lty5MT5Y/kdsH/ZPZOjCZNalZuSJm6Yn9075GlW0f
|
||||
3ZyythcpyHSLh8/xmdOltjO17KLUdqYHudRPOV8ctBU4H8br/Z8YEE2YHGjCN6a/
|
||||
gt9yI+HQNdvFdRXcejJ9884x4UV/Zv74NihyWu51GHXI50vXEjj/wmisLEbNmekT
|
||||
PnCgNSQ5vH4Y8xBcSikvxX365KX3mPzYlh3j5DvfaFNmvHgr+ci/1Cf+NJO88tN7
|
||||
GsTHQWMLmkzPPGS8TrCXuziQdsyW+8Tiy5M860lUdar5fGetbKcakStxw0KDe1Bd
|
||||
wy5IJLvJHGWXTL0VV3ITY8n6F0ou/htBkjC7vUnuY/h8YxIpPb6dP+UGVKsr5McS
|
||||
69Uu1Aos0W5WMbfE5zYwerNv1qGlGibMD0xnZZKraGTejG7/URAgq6J7dYQVlvAU
|
||||
TS5uFE8njtEdwTktWM/dRsVtpdi39DcYQB1jxnxCCzoXour3MtzvEgPfjtoBUuxd
|
||||
Cu8vub0FRRTq3xJGq7RE
|
||||
=k+hz
|
||||
iQGcBAEBCAAGBQJTBpmkAAoJEJQzkH1pP7W4qdML/iXeff6d+SCR4vCJ8s700pLV
|
||||
Gpjx8CKow5ev4zamXKltUe0w3zLA3klWiFM8DhaYUqIkwyINFeasRZmKeMkviPpP
|
||||
EVrWyC5m8EZyfm1PSz6j/I57zbVQSLGpJ+Wwz/WYdaRbiPY9oBn3lCSfvIiUc2ro
|
||||
vTZj9n9m0ESTKjQSUVbwdZpbA9IezGBzRIzw5Ye6KFGxgPdznvQftgm0bVSAhQ1H
|
||||
P0JLrdCatn2sLSYNmO70SLIrY1h3Rw5VCP1pCTsZDRL0qftIhbn2zvwSmiLbf3WJ
|
||||
DNVcqfDVr6AGaUSsDxLLbeFyH96FlyGLDd9FVldUgcjJaxHpCqY9xcTJzDcI92gy
|
||||
YtwsA5+nuL3GHIHVKbEB8X7MSYIXMSqTWM58dTfr8CT5PacVIYo+LBJ9QcC885ru
|
||||
GIYYAu8Fzgkb0gEIVMSQ2PuAC7uGtiQGMwx1QkUcuxwQOZa7oK1x82MUCdFuDzgj
|
||||
CqF9NTsdWACJPXwvQ0/sJqK4y01RWjfy10lCr+WmeA==
|
||||
=rWfW
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
|
@ -1,32 +1,27 @@
|
|||
# Copyright 1999-2008 Gentoo Foundation
|
||||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/css-mode/css-mode-0.11.ebuild,v 1.10 2008/02/14 10:07:30 ulm Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/css-mode/css-mode-0.11.ebuild,v 1.11 2014/02/21 00:10:55 ulm Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
inherit elisp
|
||||
|
||||
IUSE=""
|
||||
|
||||
DESCRIPTION="A major mode for editing Cascading Style Sheets (CSS)"
|
||||
HOMEPAGE="http://www.garshol.priv.no/download/software/css-mode/"
|
||||
SRC_URI="mirror://gentoo/${P}.tar.bz2"
|
||||
LICENSE="GPL-2"
|
||||
|
||||
LICENSE="GPL-2+"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 ppc ppc64 x86 ~x86-fbsd"
|
||||
|
||||
DEPEND=">=sys-apps/sed-4"
|
||||
RDEPEND=""
|
||||
|
||||
SITEFILE="50${PN}-gentoo.el"
|
||||
|
||||
src_unpack() {
|
||||
unpack ${A}
|
||||
|
||||
src_prepare() {
|
||||
# Fix documentation
|
||||
sed -i -e 's,HREF="/visuals/standard.css",HREF="standard.css",' \
|
||||
"${S}/doco.html"
|
||||
sed -i -e 's,HREF="/visuals/standard.css",HREF="standard.css",' doco.html
|
||||
}
|
||||
|
||||
src_install() {
|
||||
elisp_src_install
|
||||
dohtml -A css "${S}/doco.html" "${S}/standard.css"
|
||||
dohtml -A css doco.html standard.css
|
||||
}
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
|
||||
;;; css-mode site-lisp configuration
|
||||
|
||||
(add-to-list 'load-path "@SITELISP@")
|
||||
(add-to-list 'auto-mode-alist '("\\.css$" . css-mode))
|
||||
(autoload 'css-mode "css-mode" "Mode for editing Cascading Style Sheets")
|
||||
(add-to-list 'auto-mode-alist '("\\.css\\'" . css-mode))
|
||||
(autoload 'css-mode "css-mode" "Mode for editing Cascading Style Sheets" t)
|
||||
|
|
|
@ -1,26 +1,23 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
Hash: SHA256
|
||||
|
||||
AUX 50distel-gentoo.el 234 SHA256 381c351c434675e8dce2aa365c6cd444460172541d650d0d69ba678697bf6a33 SHA512 730432ce41672107600cf9256d9c64b41d1a924d8e6209b30acdb6dd6d3ad47272c9521a72652404b04cce964b633ff5ecd3b58ccafa528cbe6c03b17e6a2f92 WHIRLPOOL a8f213f6e5b0239b494e7873631030db42dd6abec8e82a52c8b332449797a572aeadfb400e82f14a69b2d3d23eaf35281823d170e042b053c7eb4a6f784eebb8
|
||||
AUX distel-4.03-fix-ebin-path.patch 1152 SHA256 0343e67b3fd5f114cf5da5ddf755cae120ef41bbe31cce78122cb530262bfc0b SHA512 564ba0b0ffbf1f2c221f6f0a7b18861fa44a2a979930afb16c49d69c4aebdf12f91e6ea07b1acd96143f2eafeed4d10328d136f1f4434432661fec1aa5428de2 WHIRLPOOL f2b814c0c95eb26198cec6b45c6815a9fb644437f6bfc521ef50b4e976f065ebcddb3921aa0aa8407a957f08582ac6dc7e8b8b829088e23aba2334f275c64268
|
||||
DIST distel-4.03.tgz 210737 SHA256 0fbf14beacfa6019fbe4f453d9b0748e160a82995798b23f37ff4d02dea16551 SHA512 68bf73c873fe3cf70e1ee29ab27ca71a8a51dcfab8cf3466ccc76ce80f77a12bda15006014648c8ed2e407d278feb15d28d0465fc678aac9b8da37faaadc3e8e WHIRLPOOL f58015272174199eb6dc0ebf79cfd4d09fe2451f5710af2b83c147cbf4d18606c5a799835f580cae2904a365ced9b80cc469d28e7e6b2b5fda1e3af3162c9d45
|
||||
EBUILD distel-4.03.ebuild 1188 SHA256 b989016cadfcf528a983e55c8a1c2520582c8471360ced826bc8dc7e8ae2f5ce SHA512 bece58ef019b24b31ac88334e32fe0ba4b048c5ba8298a4dcf7b4076009d1c7b60bdfe3f2a33e09848e6cae3ad7233f4384333d3a8578d495e26772bc81aeda4 WHIRLPOOL 92dabd741ac4064913f107b7acc87d5c8b98ea032aed26bc5a6c3172a65b9c3b09e6f90e30780a44900f9620a522c6f643e3b1a7434fd557ebd4b15bd7d8ed6d
|
||||
MISC ChangeLog 1133 SHA256 c082bac20a75d99cd761b2217d00d044ee608a69a0e92921205605dab2419e85 SHA512 111b24784e04df5492472fc9cb65a66bec857818feac2278391bfb67a307419d5c23fe29b6b16c47e733df0ed50f49f616ae4259f093398d647290df1dc37b37 WHIRLPOOL 4150f384172f4e53f80549ac38d9d1fccba59da70b52d87fe721f6e1568f41901fbf87e9db6801aa775caa5574e359ff3386ec99eea9159cc61295471806ef67
|
||||
MISC metadata.xml 235 SHA256 1c910e039c2e23bcc3b96f7bd8156735e1f8c1d8e8172f9e99398a13f39975e9 SHA512 fda6d42fcc139674ff870afb4d05de7057c427d828dda8c48e171ab1f5d4831a8d690afd7950afd2ae9b63b7b7bc0fb64fbfa2f1d5149bbe135808fc59ce6afa WHIRLPOOL 9711c8e4e49577fcc8c70decda0e4badca57bb2cb6f8679d7687f5ef8f17e47537cb8b04a08d6b7f7fd6b5fa84f9a4b87d2d89e469ce50bc10e81ed6ec16fb65
|
||||
MISC metadata.xml 232 SHA256 5b7aaa25f22af9f71a5cefff6bf72d7861c538c8a7870838aab3837219d1792f SHA512 fc48e01b70a11b5fc07e188f4f29c8e35cac6fd12058e370146a28835778f283dfd4872598df7156dfa4b21339211b07b6402ab452d931641a78c9dcb505c634 WHIRLPOOL 4b332e8e897503fbda5c7546e6815c0262c2c97fcf499711c65c7a55cf964339f9b338e8da2509f3793fea85d13ac5d12301e849fb53266f17e4dffbdf7a3f6f
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.19 (GNU/Linux)
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAEBAgAGBQJP9eyeAAoJEDxpGckxwJCBCBsP/1KfZlEyBsV3xqWuwC8yru2M
|
||||
yDlSTzSMkGhuxdv8iSv2ziPX34UAz4E1UkcI+FAb7SVyfPfV+ifee2Mz4Ihzp+Jy
|
||||
OfQoIGCZCUpndaiXwANDc3QMfcByCOn4eFWs+PNma6j8odd1hPFE1rLTa/iWC7yM
|
||||
P5j1FglESyEO5MCo1k5xOCFjHDtrYWWWmHe93PN6rF+QsXObVxhzxeMtfymqL3Fs
|
||||
qDgnB4bvnMfp0Ljpvgpk3WnFD03gDnuLiFnScZCcTllnwmk+1EXQZOMPyMT087jR
|
||||
y+gWW7JC8X7omyW9LQwJhSHFyRC7oIs99S2RuDne9C+GeWmG5oUUAdx/tFXoqcb2
|
||||
bToIaTFb7wHCINKKMAEsFN06DfNTiIh229R/fBXcJukzDMNilhMRe3dCCXz0ipoZ
|
||||
UWTOw0N1KCpGGAfaLgiwVgIkeVkNUfS1DhiLNTQgqBn0bgxRgxPyyAWLmXBWozcL
|
||||
Gwv47MGLfTAkE2pwaw/iaYw7wi0oovoTaGuS8trqW0gRvRR/IZvluJiE4nuJj+OJ
|
||||
5f+Vc27YAB874oFaJAYABEKJgtqRslu+SAB/6b/zSW2bLa01lFTfFIT5PDHL760C
|
||||
Pu6l4MuZjArWlmOEatpsNth2OA8VsO26fuC91Ku+3W6jcI3N6Oza1q7TygAz1fPW
|
||||
hgLdkbav+PrIwaDywZ89
|
||||
=N0bL
|
||||
iQGcBAEBCAAGBQJTBlkVAAoJEJQzkH1pP7W4urQL/R6+nAKrF4ehd7DDoNSLoNbD
|
||||
+mk4DzzupX0WFoyR3YviehC+DW911flnJ9D3spNMdgzGOdKinZR771uELtrYG4I6
|
||||
UVmyb+tcpUDKm98oxQYm/v47zkuPxlmSfAkwrFqCa4YNwelMd1/W5eyo1XrXFuB7
|
||||
nRxszycgyQq1NyKHw0l6SunotjK9GDqlnQjOIM29P7TZMieq2SLoA/7o051Z2lqF
|
||||
yOkJeVJ2XHQo210tFft80aLlHzM0R64dBN3T3iAmHEF0iGicB9SNuxKQlXUqS/Yq
|
||||
waMj+iGcb8xaszno//gG1JGcI4u9lPF3ieun6BRyl4hZxnDPzCP5+RLScN0glM2e
|
||||
rJE24DMSKJu02sVF3lTAZBQOXOHoanRYTbwHz3VaBKb3h1UknadYYqLMeqRoQ4q5
|
||||
f4aFR76/1k+uzFGe5YRi6szifED9avhvJ85t6+tX/Z7YqZ0EXCo8G00NZnkeuW2N
|
||||
R4q05a8nZYohZADId0mVfeAbo6baw4Yg1cAS+D7zsA==
|
||||
=CzIl
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
|
||||
<pkgmetadata>
|
||||
<herd>emacs</herd>
|
||||
<upstream>
|
||||
<remote-id type="google-code">distel</remote-id>
|
||||
</upstream>
|
||||
<herd>emacs</herd>
|
||||
<upstream>
|
||||
<remote-id type="google-code">distel</remote-id>
|
||||
</upstream>
|
||||
</pkgmetadata>
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
# ChangeLog for app-emacs/initsplit
|
||||
# Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/initsplit/ChangeLog,v 1.9 2009/01/29 02:07:42 fauli Exp $
|
||||
# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/initsplit/ChangeLog,v 1.10 2014/02/20 12:25:30 ulm Exp $
|
||||
|
||||
*initsplit-1.7_pre20140203 (20 Feb 2014)
|
||||
|
||||
20 Feb 2014; Ulrich Müller <ulm@gentoo.org>
|
||||
+initsplit-1.7_pre20140203.ebuild, +files/50initsplit-gentoo.el:
|
||||
Version bump. Snapshot of upstream repository.
|
||||
|
||||
29 Jan 2009; Christian Faulhammer <fauli@gentoo.org>
|
||||
-files/50initsplit-gentoo.el, -initsplit-1.6.ebuild:
|
||||
|
|
|
@ -1,25 +1,25 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
Hash: SHA256
|
||||
|
||||
AUX 50initsplit-gentoo.el 91 SHA256 07bc4a2888123ddac344ebe1696211b5bb9f8b9ccba0173f33bb3a60ebb9e917 SHA512 531d0f480c3787453b182be3b9fe145fffd9752155b2c26df3fdf0b497cd058f5978687df53e43046c1f44f4908679783756377998f49dc407a6e18956bc34b1 WHIRLPOOL c0b35226570b0f5fea40a51ee0631ec47087658fb8975b6ceeac117a14e7ebc4aa8750c93fa74c121f46f898ab3a3890e1099c70a84ee6576041679265581426
|
||||
AUX 51initsplit-gentoo.el 521 SHA256 6e66a35f5b0d525880d7d93152b23908514d1ba9f426b1c69c2c006f9ec45a13 SHA512 f36e7d9e07cbd47a69d20c6f61b5db0cce6a07f5ee597917a8811eb28c2bc9f04721c4b4726b6792b35d3287851e876561b2ef86cdae8ea06cd7d313b8fce4a3 WHIRLPOOL 9b4ce0a930c8270898d3d5fa2dad9b41dd9629a4483f93fcca9ff74962c6561a81d9d75390578d55ae4c8bf4d3d083b5796edf004184d1154781891f520336d8
|
||||
DIST initsplit-1.6.tar.gz 2454 SHA256 64612a8bdc43875b2889549e1182cae39041676dac92151f53bca0473cbc4e4c SHA512 a03217a4d30c539cb0413d517c954015100f17c1183f3ca7d14a7edd5c4ab7e258f05e0c1c8fe5ed6fff1071eda0f9fbe10590a27521bb99eabb4cc819fb748c WHIRLPOOL 9fdbeb2ab62934bdc669ea50b74436a317df8181f06645d4085d3108af4b0d2f3ff6ff87eaf71ec131b0172413285b9b4960ea99b62237ea64f859a1613845eb
|
||||
DIST initsplit-1.7_pre20140203.el.xz 4792 SHA256 4005271af94ca4dad7a3b6b084fcb1e5b93097e98ee15810b766efddd2f8a718 SHA512 f2c894bb9d0359b5e95760541feb83f465950de732266059b9498b7ee7361ebb843e0d900fec92fa5e9c37547ea160836b9fc24f64c56083e3ea4416b4b52e50 WHIRLPOOL d10ba44154fc6030fed39a2cb325ced928501d8bfddc47b5364ac95b0ee55bea6f3a7d01a2dad166622d2baa247a0188b30da6d2fa5f42ad43cbd20259b8ef9d
|
||||
EBUILD initsplit-1.6-r1.ebuild 897 SHA256 6a63bfa2c2b83d6b831247491deca69984c84df0f092b7aeea29e64c3b23942a SHA512 8deed0598984932f653701995c659874494110589c0f47c816fa6b4827021065aa85362e6b49f5ae4802e4473863a6ff5d898f8c16c44c067e9fecf10a3805de WHIRLPOOL 32c5a4c4d98c9ca846d73361315aee18b207fde2b2942a7dbafe157984ae69e5b3830181540022ea8c81cd44fd7a7def68bcee5f416c739d13118b132bbff67d
|
||||
MISC ChangeLog 1366 SHA256 049dd348011c081276706396cc210d44665ea64141a07d8367afa41d7e1ca110 SHA512 1139d43879927482e1d6ae0e81145d0160cf85f0ca6d61ea142a67bc8ce29c3e42cde673fed1651fdef855a1239988f3da604a6c18a1191d3dc2b9a3622dd684 WHIRLPOOL 59c807c7b3cc580a63a0f45032a975c397ae368f0eb3b5efb2b8f9ebf6d291731a0380f0c79f118489c8c9dbd89af16339cd60eaf64b96fb148601c7a243e899
|
||||
EBUILD initsplit-1.7_pre20140203.ebuild 876 SHA256 281cb2b86fa47f47d0ef9f42f83ae7b7bbaacd14a884b849cb98b6df2e81dc08 SHA512 3a323c8b0db2e5d61ec9a7a717378ea05b212f56dee020815cb227d38985ba84043586922091f2fe3302f902844e16c28e33fdede52460e7787095708e7cd58f WHIRLPOOL c48b8aaf36e95e78e7cd606d973b96efc483d8a02a208929b43c280d9feb4da567c9ced6a4da0960804b496846cf07f7abce46ceba6004b5bf557d4bb3cd032c
|
||||
MISC ChangeLog 1571 SHA256 c1c13e1ecf0e2ee9d5b722de2c30f6df6290d9feeba8e70219dd6c465c8f2dc0 SHA512 f995580f6c300f344494d3ff824eae9d101aa085aada716acd2fa740e742da8404d68166a49e2035192a66006831c3d483e7607f23f084ccad59d24f22181dae WHIRLPOOL b82ca4b446104e3d136a73bf80e7bc3154aa1110d7ca540476122c0f5674712022393e4da8ebf423d138853ba17ac3b080ad069cf702674b4ffb4d4908088f0e
|
||||
MISC metadata.xml 158 SHA256 1393bdef3a74343fdb40a112c7096a1af16f67e7a43413250de28dfe73810eab SHA512 e55d75feae933ba948ae987305ea58e36f5880f18687e8acaf91237e33e251be3ecfd5be27048f4907ea6799e0bcf784b602096dd7e2bc9c450eb5e2bb6a73d2 WHIRLPOOL 1d1676172186235a3e99ca1d148298fb24f6a089f9b7908b3c28c246c8854969835fd3742b8b81e0a30b63d76ee0be0c42bfede2416a30dfc3c8b915a147340c
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.19 (GNU/Linux)
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAEBAgAGBQJP9e/0AAoJEDxpGckxwJCB0XwP/0cjuJ8LlCOYHATYo1dl/DUX
|
||||
jW61UXqJ4OoG9dafCAXwpKSHV+2IgiWEQWZbNRZYfafb+NnMZ+VK0i5GXIqpEXzP
|
||||
dCqU+97TgafxsAACiKmBbosg7oXj+8mOe7BBGx9yVIEJARzb8OHQW51mVeiFT7zP
|
||||
Qv4P3VwAbFHyUSXoR1poO5tabyFem0DZlCuzilfoXA1buDM5dBL44iZsocZ64Iwx
|
||||
jWegQSDvecPdC23o+2Wz+tEKiPYL3uhyzts8izIJQMLqOIgggMXk4xzzmW+QWhMM
|
||||
XYObUZ66dq4ypauWRS+jfhfDPMOgzaOM8Sxu36/R+V5E+8fyp/Djh+G7qkwcJHyU
|
||||
CPazrQd1hoppBdx11DE6f1Lr2b6bwELgv7xxazkkWHF332aqybJ8ZDUFYF2tvUbn
|
||||
nLOaMERttF99h3wl2Fa0Ah1g1VOtyKN/VX5FOt9Ax0ejHXpQ/jUOSuKDY7x7nqw5
|
||||
DTqt2eVz6wu2vrq+T0/0WISoxD9WW3JYBMeVfueInQz2N15crZirBup43pdkC51q
|
||||
vMNhccjnUtvZCzsEPW4o8lH16EyrAFNrehy+DYKKAn/IDKNCSDbXqD+YezykmTrp
|
||||
FLHrsHhRrrw0usFOZDhEFsGUGWcKP25HIPw0ZUean8YSl/x7hX8Pdih/QeBhkse6
|
||||
apK0ItDkQOhbo/p6H66Q
|
||||
=vRNQ
|
||||
iQGcBAEBCAAGBQJTBfRRAAoJEJQzkH1pP7W4B+0L/juiC1AQVspYPhc4RTBBbu4C
|
||||
xxG8zowdVeUSfVZPkYLWfyqBqZxuxTW8grEc/5Xga3eXkO2U70Y45XcArlW3T0pJ
|
||||
FKXt17Ly/yG/YnEwnMcJCHftBc5nCJmspjaFih4JR9RsXy42rlNF7hJ7t+DWy+C1
|
||||
CzLQQ0/m2wVoZ0kiuT3SlIT0wiHvhpqgGMbOxbKs0COUIR1TwX6keX5uPsBoYkmT
|
||||
O1pG0yf8QDERd8XrwdL7B1dH6ITgWF6l9EQ85LbazjMDNSiDjM8WScxI4jcmkf3t
|
||||
BDNEl/uG457SnIXh92OvU+DXZFsnXembbyXdpBqZFC/ynWFjcI7e7oid6K0OQjGa
|
||||
AWlPwashBOV9Kxt8a1SlwTleXZdyessx4TiCCB6v5PskkRKtNAs3JyNrPBsj/m2n
|
||||
gxfWitNSR4DeaMcFH1HxioLZzimZGAbamV5eIZtWDsnoha7BI/uQZ6G+6mudW+D/
|
||||
DkQT563yCKiRXcDVlxgxHWApGhvKVl8sAJTOM/h5Sw==
|
||||
=8WoA
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
2
app-emacs/initsplit/files/50initsplit-gentoo.el
Normal file
2
app-emacs/initsplit/files/50initsplit-gentoo.el
Normal file
|
@ -0,0 +1,2 @@
|
|||
(add-to-list 'load-path "@SITELISP@")
|
||||
(autoload 'initsplit-byte-compile-files "initsplit")
|
23
app-emacs/initsplit/initsplit-1.7_pre20140203.ebuild
Normal file
23
app-emacs/initsplit/initsplit-1.7_pre20140203.ebuild
Normal file
|
@ -0,0 +1,23 @@
|
|||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/initsplit/initsplit-1.7_pre20140203.ebuild,v 1.1 2014/02/20 12:25:30 ulm Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
inherit readme.gentoo elisp
|
||||
|
||||
DESCRIPTION="Split customizations into different files"
|
||||
HOMEPAGE="http://www.emacswiki.org/emacs/InitSplit"
|
||||
# taken from https://github.com/dabrahams/${PN}
|
||||
SRC_URI="http://dev.gentoo.org/~ulm/distfiles/${P}.el.xz"
|
||||
|
||||
LICENSE="GPL-2+"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64 ~ppc ~x86"
|
||||
|
||||
SITEFILE="50${PN}-gentoo.el"
|
||||
DOC_CONTENTS="Initsplit is not enabled as a site default. Add the following
|
||||
line to your ~/.emacs file to enable configuration file splitting:
|
||||
\n\t(load \"initsplit\")
|
||||
\n\nIf you want configuration files byte-compiled, also add this line:
|
||||
\n\t(add-hook 'after-save-hook 'initsplit-byte-compile-files t)"
|
|
@ -1,6 +1,11 @@
|
|||
# ChangeLog for app-emacs/mode-compile
|
||||
# Copyright 1999-2008 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/mode-compile/ChangeLog,v 1.3 2008/06/14 23:28:25 ulm Exp $
|
||||
# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/mode-compile/ChangeLog,v 1.4 2014/02/20 17:36:48 ulm Exp $
|
||||
|
||||
*mode-compile-2.29.1 (20 Feb 2014)
|
||||
|
||||
20 Feb 2014; Ulrich Müller <ulm@gentoo.org> +mode-compile-2.29.1.ebuild:
|
||||
Version bump. Update HOMEPAGE and SRC_URI. LICENSE is GPL-3+ now.
|
||||
|
||||
14 Jun 2008; Ulrich Mueller <ulm@gentoo.org> mode-compile-2.29.ebuild:
|
||||
Do not assign SIMPLE_ELISP since elisp.eclass now detects this case
|
||||
|
|
|
@ -1,25 +1,24 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
Hash: SHA256
|
||||
|
||||
AUX 50mode-compile-gentoo.el 302 SHA256 e882a46f36a9e920f5ac2656d97f41e653dce6e0ff23086ce17b3b84f5a38634 SHA512 135f6ec692c1330e3bbb49cae08ccb4ad7b27ea1604f39517ed94784cb47502ffcbd1323b4dabd8429ea282ca98f6b1306facd78368bea8c90493a636108784e WHIRLPOOL 28497bbfddc6e76f460b39b923ca84458b8b75de69784da4accec084d24812b053d722e698d38d47479ffd57f89ba75845534d2fad8734779994953ca727eb3a
|
||||
AUX 50mode-compile-gentoo.el 255 SHA256 a222c3c4d39a0b5febf275e2594611182d862c044e0fb74d0bdc92959e8e7b65 SHA512 4214eb678ef2ee902bce458f906d19cc90f2d2f793e34e45b98393dc0d6eddd29334bfbdf1983793aa840f827654b093519686bf643a9593df9b0cd5783d4241 WHIRLPOOL 0f97ac0e55798dfa34224fec1d3f8645e75b12332b40b0193cf6b9978a08b0d74a1287417d55a86f0b3fa8883aea8a4ee357e0b3a6dfd8ca462f5e2bde6aeecb
|
||||
DIST mode-compile-2.29.1.tar.gz 22924 SHA256 9c7dafa3a5c5706316a01071a2769beeecf228d0831fceb53d27d4e47c9d0421 SHA512 bc43d9cae411f5177ce70c736041db74c6db1dc5b766b22b92227e9e1324d304276bd104d8e3cac9ff5a877fc48b6da5b904e1acdb6cca7396fc7c26cc572815 WHIRLPOOL 3980e43e28438f5eefbd1d8e689cc18d9cc922857ec3e32b58c6aa6d056cc6798c2094b65de28705db6dfc95e493a06858a208c536f2c9d217027d47c4b311a9
|
||||
DIST mode-compile-2.29.el.bz2 21579 SHA256 c7cd617d5b1445638621b37f21a062de41f9b3b3eef829d9aa045a5571cb6556 SHA512 31573552298f2ffa8e89dbdb4155f3c95c5e354966ec4966098fe90bffd0e8fd8ecd86a7453adc10fb551622b9929aa58ce3abeb90b605373d6d4a874aa5ba7c WHIRLPOOL 85f1f740d3f3fe311bbc888bcdeba0a9ebb614b0adaae231d0aeb0912862e79c44130880d1e636a7465c9bc8f92261e0eecf961ecf800b60bbba1d76ee5b0e40
|
||||
EBUILD mode-compile-2.29.1.ebuild 586 SHA256 7c77e7f39a92b166f125d55ff1f3ddcd9c345a010bdbfa09e4a0fce5a2fa23b7 SHA512 f599daf6488b343297b92155260eb323f6562955a23ed4e73ed9ac5c5e9844cf8631061c55a5448e7ec6dc57626312a9f18f38079e092f3a1fe23e54d3b9a36e WHIRLPOOL bdcfeeba8a5efa060017b108a487e5b489aabc764f69d4bd4ba1ced7582890a9927f34c49b48e58f92bb2f97d09323ae42bb04fdc35e56ad83c7cc06717bdd4a
|
||||
EBUILD mode-compile-2.29.ebuild 553 SHA256 3eb3a7535aa60870248455abdae2cb144f5ec6d737dc6de0ed3f16baf5755d37 SHA512 5ac4a741f0ab1d032c0765aa253bfcd7d18e3f5b03681ac7176b2b68acd635346c507fe17cb7314ba7c1f74959d6f1abb5dd2435e56d647c252d870ea1b1df79 WHIRLPOOL b8bf52c5c2846689e011091446021325379b7c942d9ea785f8db17a62ab1f9569ed16ab7b31e9c4633732c0226cd2edcd086c0aa48f6d25c6d923eec8f6c3c91
|
||||
MISC ChangeLog 748 SHA256 bfdbc25727d48ba5ca2d749a4d00220c04e385c92bedf600aebde5bfab207de6 SHA512 bd78379bf9a1534e74c82dabb6fb6db318f084e1739a8388be46e6fc51a57a422b3388b7a2e4c079620d4c563f67994a24c3990a615c20a9eb0fb9af50b40f68 WHIRLPOOL 3508e4f914fa8cd8bd880863c4014996db7f1ac33c164d68d8e4cd1385c76d23bc0d263ad73a0d35e18f86a916913d4aa80b6f9999122ae1acd489213c03e0a3
|
||||
MISC ChangeLog 929 SHA256 ae327cda445259c7899cf8cfa50e1773df176c4dcb5128bbafc17a1c671cffa6 SHA512 0a0952bfde2fb34fe3e189304b4a03ddc585cb73072b720ca4c78274373f5874e49eead99c09c57238d22bec8c8c9ad76a98dee8664e2b376137bbd3b109dc00 WHIRLPOOL d31d6fad00662e51a928e099428bd9d6285b2769524e8e4f1df5b50006f94e288d06b21c847c7ffe238cb528cd735e61deb21dfecae3af65714bb04425fe59f8
|
||||
MISC metadata.xml 158 SHA256 1393bdef3a74343fdb40a112c7096a1af16f67e7a43413250de28dfe73810eab SHA512 e55d75feae933ba948ae987305ea58e36f5880f18687e8acaf91237e33e251be3ecfd5be27048f4907ea6799e0bcf784b602096dd7e2bc9c450eb5e2bb6a73d2 WHIRLPOOL 1d1676172186235a3e99ca1d148298fb24f6a089f9b7908b3c28c246c8854969835fd3742b8b81e0a30b63d76ee0be0c42bfede2416a30dfc3c8b915a147340c
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.19 (GNU/Linux)
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAEBAgAGBQJP9fGEAAoJEDxpGckxwJCB5lYP/A8/SMaSDi00dvDyNB+90s/Z
|
||||
6fmD2//DrEIZiEndqU1/DrEJ/MqtH1tioLSnwhLP25HFcPC/kBZPWfKZ018hN0dU
|
||||
xCY25W5CY3E5+zI6r76cazXf9yhPurkmLFSqtXLkgFWBhzz7QLm46zAOdPuVZiQt
|
||||
oZeDs+3GkrO+n5u/Dd2r0arGY5NOuKg139Qq4+6HMCp9zl9zG1fRWYvYPh2Z0Hz5
|
||||
3VIi969/2XCY/LT5N6g7bS6Siv/CbkW6DckmI25NfndM0ilrHM8Ex6hfgncApwPi
|
||||
yzj/8XcWiSiCMfkxUmzm4Scpuv0Q1T4MpwuvDGAJeYstgHCNpWSjmCZNYiWyDp75
|
||||
6JaTSbXnb7+vifHDy1bvqyi+u2uDk63U2hNRv1OeklOQYV0Nthmwgi867px6umv3
|
||||
qI6Y3UQwAszEB90vkaU7RFSYkGJf8m2fKJv8op3AByVRuBkpRVzmACqB8ynworTx
|
||||
NYKX0K38rlfgLTaPe22TREho838i6JMH6UjUgI7F5AqCxL1Za98IPquOGzGapoH4
|
||||
BNTuTEg+zxkjq4k6rNHVXYTQOSnhKghQM+C7QpwD6+4JvQHaznARkJ6I8wXoqcTo
|
||||
nfw/HCMPM5rzpuPeHra5B3MyOLITGmb1VBMWLduhvVN6MTjjCfLW/PwhH4WvMdCB
|
||||
LCC6KBKJ1K9EXoP6rWwa
|
||||
=PGZX
|
||||
iQGcBAEBCAAGBQJTBj1HAAoJEJQzkH1pP7W4+WoMAIlCVWxaxx5PvqD2lajRBCMP
|
||||
K4Cb8n51vtu4D0T/QyvRhLmmvFq+kOC7V97syujgLNWcP8AMgQZTrmaEQ1yiZabd
|
||||
ihH8AYwTB7u+jmmJBzNekkyTmbT3eHFP/ED7GS49UK66j3ku3xq6Z1pdWdwf8bci
|
||||
BPg31Lut2H5xy7LfTpf1VyY6U57msu+vwUoLuy1bZIiOUcBQa/Gw6H4PorcAF89M
|
||||
3k2LOLBqbsh+qKJCP1YXYcazxQAkApv8UUL9y+TRKV/7M+bZl1r4he99mo6RbZO9
|
||||
RJyednZzl+lBC1kb/CyD1Cw/QeWSWk0qGkkykxHqaxJMQCwGeR3HUxiwft2GHZ0K
|
||||
vRDp9s+rxZrSxPqlTNHqGk/XbKYplxfa8LBuxVr7n0F5oBOM1z181Kfctds+I8D+
|
||||
TUkiOgRaWRwCrF7pd4gXEURg8m4UexX/Nn9PvmmCY2rBFwAF9hx7JurwAZZuKzCd
|
||||
YvLo+K10tGZLq3qqKkBB9EzvkmTen91ERFUJawu4NQ==
|
||||
=pkxx
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
|
||||
;;; site-lisp configuration for mode-compile
|
||||
|
||||
(add-to-list 'load-path "@SITELISP@")
|
||||
(autoload 'mode-compile "mode-compile"
|
||||
"Command to compile current buffer file based on the major mode" t)
|
||||
|
|
18
app-emacs/mode-compile/mode-compile-2.29.1.ebuild
Normal file
18
app-emacs/mode-compile/mode-compile-2.29.1.ebuild
Normal file
|
@ -0,0 +1,18 @@
|
|||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/mode-compile/mode-compile-2.29.1.ebuild,v 1.1 2014/02/20 17:36:48 ulm Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
inherit elisp
|
||||
|
||||
DESCRIPTION="Smart command for compiling files according to major-mode"
|
||||
HOMEPAGE="https://github.com/emacsmirror/mode-compile
|
||||
http://www.emacswiki.org/emacs/ModeCompile"
|
||||
SRC_URI="https://github.com/emacsmirror/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz"
|
||||
|
||||
LICENSE="GPL-3+"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64 ~x86"
|
||||
|
||||
SITEFILE="50${PN}-gentoo.el"
|
|
@ -1,6 +1,12 @@
|
|||
# ChangeLog for app-emacs/mpg123-el
|
||||
# Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/mpg123-el/ChangeLog,v 1.36 2012/11/20 20:43:21 ago Exp $
|
||||
# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/mpg123-el/ChangeLog,v 1.37 2014/02/20 18:25:34 ulm Exp $
|
||||
|
||||
*mpg123-el-1.59 (20 Feb 2014)
|
||||
|
||||
20 Feb 2014; Ulrich Müller <ulm@gentoo.org> -mpg123-el-1.55.ebuild,
|
||||
+mpg123-el-1.59.ebuild:
|
||||
Version bump.
|
||||
|
||||
20 Nov 2012; Agostino Sarubbo <ago@gentoo.org> mpg123-el-1.58.ebuild:
|
||||
Stable for x86, wrt bug #441070
|
||||
|
|
|
@ -1,7 +1,24 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
AUX 50mpg123-el-gentoo.el 121 SHA256 f98c0b7674758684be83e3311060a51ddaacd9576ffe88d87083c0406bc93839 SHA512 65b1d2039ce0773a65cf26fc88699ccb6fa26d7db2312ac6a9d0712512c214ba7b5758bd1556365836fdf840bcfc9eedef12f18bcdd1866fde6937777979a032 WHIRLPOOL 38a4b9b8ee3c5edcd344e2f192531ba453d458089c69218a31d87a1cd0ffe7614283b6d1f8a8473843a3433bd5635b02d9ad6afda52fffca8a134c3f3c6939f1
|
||||
DIST mpg123-el-1.55.tar.bz2 33925 SHA256 c388bf8e93b772c90126b905224c43cfc2e709be503e3508b684f05750d19499 SHA512 49737d9eab292599f446d87ace8155be0227fc2f18910e3d184d238f323b40218630a91cef2438dd0e5453a289f32f4fe9cff3f884a7e20cc63dd4668cb48c7f WHIRLPOOL 5b067cdc810c843f693cfd1445e9ddaf57dc19cf0ad7440e23482af5146da3aa008cdafb4828a2191153551d81e3e885d924b119b107c2d50c712d2930c65d0b
|
||||
DIST mpg123-el-1.58.tar.bz2 34097 SHA256 efdd491329ba56096ad971bd5c2e2ceeea296fe8e26340d2370ae63bcdc33606 SHA512 53a67eb219acbeefeb8360a9d43279d2bb3efa48fa5df3787f2b7fad4f6b49402f319925bac3fc17ee1cad0dcbe38494c8162d4eb5e08261b2e505b40a66a987 WHIRLPOOL 83c8d660fd18d3faefff106c62127c0487c47824f9b53f157c27b127cd1dd624dad445217b99e5e3183ab02bf13fef3abdd077451ec8ce934c188fc356522181
|
||||
EBUILD mpg123-el-1.55.ebuild 992 SHA256 f8b4a12ff5b1703e8869e83f49768886a5fceaaddd3750299a67cd1e7a40706c SHA512 65a697b65b1fd29a62796ede35ec5a966dfa833872ef283a3e83d840452844db14948a8eee6676cb47927af6923424f88889a640c491adbdba7c18042f6fed60 WHIRLPOOL d2fd011e88b4c402c959753e5a46be1d5a142b95469f43019ff8a5ce95ac091e12aa94cc33f96013c0a186c467492f486c0562dcedf0284bacd1c0b14d2a0ea7
|
||||
DIST mpg123-el-1.59.tar.xz 34076 SHA256 6105c3d11099a96cc5cb77909ca8d9e5ea4d5cb78b6a7ca185eb350425e075b4 SHA512 48fae024529be7b88553fc43fb626253f3d3a10d6709378a565a0d407374569e5573e52c0b26abc4d6f2f51ad7f680d655a1ac15ff696f4534c39a9a3536bc0e WHIRLPOOL 6434aa2368976698437c0a7ec12c126861c7f0096f4263f59b555b59c8d20377b5279ce09ceb99bb4b333318541126bb990009234cbd611ffdc2b91e980903f0
|
||||
EBUILD mpg123-el-1.58.ebuild 1002 SHA256 b13e69fef0d8d2fa676d446eab4d2fbb50f4082be5ada07fdea7fa2cd5ea6dac SHA512 ebf112c9f96212b2ab317ad0e85606d12834121711ad1b73817153bf1ae63cf0271f070fa5e591549286645362ef94547c03a4aeb805cf3d16e486259f766f57 WHIRLPOOL 5345d7c9a25bd8b7acaab8980a3f1b1fa4743369924141fffc0a5efc91e15117396f843759c919bb21c6456e92b47523f3757540a1250088e733ca6d8adcc182
|
||||
MISC ChangeLog 4338 SHA256 dacb08bc41f31a0d0e11d427ea8bb817b9ed88db451cadbd04c189042ea5fee4 SHA512 91ce75dac05dbfde19d318ad15f5c7a2c3a2a5536071fdfbf95be3045e9add20fac3662c1828aaa4a32dbfbe7cd5737749cf784da9c74f3f1d725dfb478f6244 WHIRLPOOL f669b2c69d70788ba03ee559c5266f4e669845948ab671a1b4f6690271f8c7f8b41dd2914d18a3ab64b2749a958f542c7a2fc5064f6dc70863a5d6e22c2bd85d
|
||||
EBUILD mpg123-el-1.59.ebuild 1004 SHA256 99923c34f4c385f22937306d025274a8c7500a9152d9f5d6bc0c658150e5e8b1 SHA512 e1c75dd44a80041eef0bd5804842e290c17a2e8a6d311f53f87aa0d3074d281135977a945422700ca6b33bf7d937824b46e24bdfa2b142a73354fcbd1b9cb67c WHIRLPOOL ef523272ee4ec38f23005156f1b2d759b415755e3f2783e93bcc00200fb821a8a85319133acf959bccb9eb05e3c757487a6a2cf4d0f3d5f6814377a12cc4a5f9
|
||||
MISC ChangeLog 4483 SHA256 78889cc3dea55ab29eebc4f5170ab8016f6c49240a7520e5e33a62f615c964ea SHA512 aa8401af6ca39b69bc4c33b4b69db9dc8d230c5ddf36a61390a61ff9d5b1466f3e4803e8085f295871124c0c6417f69f477be38398cbe0a87c003bc0f9e41931 WHIRLPOOL ef4e32d5538d66b9c65d4e90c1b534db18ed265b2e62756ce7c7c9a5d135689b976203b733c8b4ca171869175f6395aa58e89efec4c740fe9c5a79d2cb1fda19
|
||||
MISC metadata.xml 158 SHA256 1393bdef3a74343fdb40a112c7096a1af16f67e7a43413250de28dfe73810eab SHA512 e55d75feae933ba948ae987305ea58e36f5880f18687e8acaf91237e33e251be3ecfd5be27048f4907ea6799e0bcf784b602096dd7e2bc9c450eb5e2bb6a73d2 WHIRLPOOL 1d1676172186235a3e99ca1d148298fb24f6a089f9b7908b3c28c246c8854969835fd3742b8b81e0a30b63d76ee0be0c42bfede2416a30dfc3c8b915a147340c
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQGcBAEBCAAGBQJTBkizAAoJEJQzkH1pP7W4HS0MAKMWvcW5pgf1q3+E47oiVc6K
|
||||
q2ezyEpSjoSLrmcMznXdaOOsizt5hAN5OHFkaIziaC/3akiyPiVgpsZpzVOPI1AH
|
||||
zqw7s8snzxNkUvdEkoxpq0d7/sHBdBc7BcBSgyExbzLUS0YVM0ys62Og1eAYhPkz
|
||||
2ceM+9aBEwThpLGuO+PqDLPmeoIKNhjA7ohZ60AqF8VM3VCgL0PTcYRi+81qOmWq
|
||||
pEgzj0n+nTtG4J2D5QT0rzuwC5wxCdvHTpz2pnxFlVDt95gk9MtS0l4QXr+FX6/s
|
||||
XZz34ZzUu+Ju+WRv0Q0EaIWls5igZJVvBtwA4MusfrycwHGGz5cDS+ewDHcKE7nf
|
||||
mtKd33ChBUpubA0qwRNu6IDhVPC/BHAphzn2fbAloW893SigASeITga0co5xPENB
|
||||
wgR3Y8G8Wbj1eULvfMecFT/SSjyJ5hw1VbhoXXvoPw/FgZIGY+lQYR7ox6LEW5Ny
|
||||
P3PVaEn4nIpglv3CdH4lSiaJrVICNNy0l4RYni8/Mg==
|
||||
=8fSY
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
|
@ -1,34 +1,38 @@
|
|||
# Copyright 1999-2012 Gentoo Foundation
|
||||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/mpg123-el/mpg123-el-1.55.ebuild,v 1.7 2012/09/25 21:18:36 ulm Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/mpg123-el/mpg123-el-1.59.ebuild,v 1.1 2014/02/20 18:25:35 ulm Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
inherit elisp toolchain-funcs
|
||||
|
||||
DESCRIPTION="Emacs front-end to mpg123 audio player and OggVorbis audio player"
|
||||
HOMEPAGE="http://www.gentei.org/~yuuji/software/mpg123el/"
|
||||
SRC_URI="mirror://gentoo/${P}.tar.bz2"
|
||||
SRC_URI="http://dev.gentoo.org/~ulm/distfiles/${P}.tar.xz"
|
||||
|
||||
LICENSE="mpg123-el"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 ppc x86"
|
||||
KEYWORDS="~amd64 ~ppc ~x86"
|
||||
IUSE="vorbis"
|
||||
|
||||
DEPEND=""
|
||||
RDEPEND="media-sound/mpg123
|
||||
media-sound/alsa-utils
|
||||
vorbis? ( media-sound/vorbis-tools )"
|
||||
|
||||
SITEFILE="50${PN}-gentoo.el"
|
||||
|
||||
src_compile() {
|
||||
src_prepare() {
|
||||
sed -i -e "s/\(mainloop:\)/\1 ;/" tagput.c || die
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
$(tc-getCC) ${CFLAGS} ${LDFLAGS} -o tagput tagput.c || die
|
||||
$(tc-getCC) ${CFLAGS} ${LDFLAGS} -o id3put id3put.c || die
|
||||
elisp-compile *.el || die
|
||||
elisp-compile *.el
|
||||
}
|
||||
|
||||
src_install() {
|
||||
dobin tagput id3put || die
|
||||
elisp-install ${PN} *.el *.elc || die
|
||||
elisp-site-file-install "${FILESDIR}/${SITEFILE}" || die
|
||||
dobin tagput id3put
|
||||
elisp-install ${PN} *.el *.elc
|
||||
elisp-site-file-install "${FILESDIR}/${SITEFILE}"
|
||||
}
|
|
@ -1,6 +1,11 @@
|
|||
# ChangeLog for app-emacs/protbuf
|
||||
# Copyright 2002-2008 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/protbuf/ChangeLog,v 1.11 2008/12/06 17:16:53 fauli Exp $
|
||||
# Copyright 2002-2014 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/protbuf/ChangeLog,v 1.12 2014/02/20 23:14:09 ulm Exp $
|
||||
|
||||
20 Feb 2014; Ulrich Müller <ulm@gentoo.org> protbuf-1.7-r1.ebuild,
|
||||
+files/50protbuf-gentoo.el, -files/51protbuf-gentoo.el:
|
||||
Update ebuild to EAPI 5. Update HOMEPAGE. Specify LICENSE more precisely.
|
||||
Move site-init file to canonical name.
|
||||
|
||||
06 Dec 2008; Christian Faulhammer <fauli@gentoo.org>
|
||||
-files/50protbuf-gentoo.el, -protbuf-1.7.ebuild:
|
||||
|
@ -33,7 +38,7 @@
|
|||
*protbuf-1.7 (31 Oct 2002)
|
||||
|
||||
31 Oct 2002; Matthew Kennedy <mkennedy@gentoo.org> ChangeLog,
|
||||
protbuf-1.7.ebuild, files/50protbuf-gentoo.el,
|
||||
protbuf-1.7.ebuild, files/50protbuf-gentoo.el,
|
||||
files/digest-protbuf-1.7 :
|
||||
|
||||
Initial import.
|
||||
|
|
|
@ -1,25 +1,22 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
Hash: SHA256
|
||||
|
||||
AUX 51protbuf-gentoo.el 567 SHA256 6d0b7a8a2e2d7e28d61131fc4c299444404dfb066a71aad24f3e4236d10f708c SHA512 670d4798b71f1242ddfd6fbb31a2a5e60c0a54cbcd92018fd615af05ced971024f539022533e878df91b42f18d4608cab7a28cf9dd648ef38d4a67f0201d3b34 WHIRLPOOL 88c0200a27b3490920f4b1a759ea54f57f27e6d11640ea40da77ae40cb77666a4f80469a67d20b945cbe8373fecef657e6f56cf92d499b2c7b518ce326684112
|
||||
AUX 50protbuf-gentoo.el 529 SHA256 5407e0aa60151748d63d51bc9dc37bda6252820b77f9a95d0773f85e6115a65a SHA512 f1cd37bdeb9568cbff9ffb989334237213b8c1bc50704195708fcac4848cc3c128c8121422a0ea42af8c2ee94647e325cd293e4b29c513ad8cdeb37d33fd3f4c WHIRLPOOL 97c2701d4d4d489f028e21e6ed9dcbb6a251be8a9783dfb2a494fb6c19a2c74c861b9d32d9461a7c8524ee1f9fd6467a3a6ff91457b54a255fd2f8addf4b5366
|
||||
DIST protbuf-1.7.tar.bz2 2270 SHA256 a3c78450bc9e04934d842913984e36f674a7c8d54eaf1c63aef61d8904d2fca5 SHA512 9dad81784b71234812ac35be695895c3063e5337dddbed73b28fde800d12110cec6bb9faa42b6ed74d9a2d4f12da96b8e692d193edfc775fd33a7922a019b8b2 WHIRLPOOL a55039d8f4d4dedf4b8c7083204c9cf45c8d9de18b9763ad1f1e05ecd92af93e3c10a0c745b8c3888d6d797704d61dcab0272e2dfffa0c36fade9e89d9a4903f
|
||||
EBUILD protbuf-1.7-r1.ebuild 493 SHA256 360d3ad820579f92876ead0f40f196173b445a54240edf0cf3e009739ddeaf45 SHA512 56dc678e1f32ebe013ccf4519d409d2ac29a86342fc381045c0ed5ff2526b73538f3d9bfa5802529279747f93e25f4d67db7014ec11bb7b0714c3ee1fb8761d7 WHIRLPOOL 29f164d363bcdcabb01aff6b501dcf9bc9fb0b8f29d13e55039e29afe302c8c97b92fcf6d90804b86ba3bc6b811f7554e80e3ecdd7b900c3d776078cf2920f49
|
||||
MISC ChangeLog 1258 SHA256 e24220ac970014038eb114ad6037904e24772f50e17cf941224210fefd60f85f SHA512 cdbe0eae64c42f3e814f434c4eca295c2ef59596c7de7a74c27804b382a6ca253df88951792dc4194b5ffdf686bae2954810c6659add4d13afd95946cda10975 WHIRLPOOL 34c34eb5177ebbd82edb7213a1095f7ac190412be8688ea3f30d583b84713ee54a66d4656f227e736db2b4924a034d25b10c56d8611f6c70a59dcd73a63095cf
|
||||
EBUILD protbuf-1.7-r1.ebuild 538 SHA256 32be7026604cd5cf2cee7c0597406be3f400f2871973a4359380167dbe134b01 SHA512 52ee3ed18ad548a2d9a52a9d00c02dbbe535d3d86e03b7664afb5f52be1cb140bd83cfea1881d0009ce387bb2e11100b32fd7f2484907034fda8fdf349d98151 WHIRLPOOL f9c74619427ea8d0037248ac6b01b64a95889543d35da53b44dea22931ef3d56a94e7aea625355823b187e32059f59bdd1218d79affbf12d7564278b2fffed47
|
||||
MISC ChangeLog 1501 SHA256 75b40134f21eb66ec5f79a0f071a7663f00e0910604af2a2c61abee992b564db SHA512 41a0e9e8d42fef37a81bd959929bacabf2a15c1220683fb28bc81bc82e3691fdf910702a3fd87f21e9a1e986e727321ac9fb8f3d70264213bf728c34f706b16c WHIRLPOOL 01d97d44e4fe844a6b212e5176e362be4e24c3477fe75f54519e521ddcbb9421899cdb6889c6a85e439967a6b0ba661fe5aa13068a253a2b02538ce30c49e464
|
||||
MISC metadata.xml 158 SHA256 1393bdef3a74343fdb40a112c7096a1af16f67e7a43413250de28dfe73810eab SHA512 e55d75feae933ba948ae987305ea58e36f5880f18687e8acaf91237e33e251be3ecfd5be27048f4907ea6799e0bcf784b602096dd7e2bc9c450eb5e2bb6a73d2 WHIRLPOOL 1d1676172186235a3e99ca1d148298fb24f6a089f9b7908b3c28c246c8854969835fd3742b8b81e0a30b63d76ee0be0c42bfede2416a30dfc3c8b915a147340c
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.19 (GNU/Linux)
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAEBAgAGBQJP9fMxAAoJEDxpGckxwJCBBy0QAKbc3ZRvORj5koT43zKrdzTw
|
||||
0bmtWH8vX+69qHaYhANzlu0xvJwdUvkN5Qa6qmdonxnleNfdbqr84c9fnl07foxy
|
||||
prXwSg3d6WYIl6Q7LpTp6xGEAXg63zohL9jQSPUNcOITNehaGp66cZ5grECjWpdg
|
||||
VcFVrr0z5yeK0hLDRIvWNsOxY81tGUnAciAB40e7ufbO0mOJ8n3kk9w7i49/PR4X
|
||||
bwp6kB5cIITamYXCsHbk5uu0BHZ0tH/2PTz3W2vZ7lgpQzZCDVJn3zomqmni1Fhv
|
||||
/jZ7cKH7BY7vtkYN9xhK7GUUNH0TkUi/5HGP8U8zN5Ct2UXXY6eT2fsJvgd9ZIQp
|
||||
dq6S6F/5QbFExaGbikF+dekzEN/PEdPoRUaIrUF4UzBq8gXpBZEShAlvpXh8Gdwd
|
||||
YXeeI8/QhMGxl8GNMSXseQAkUcXvj2Tvhbd/NvCPnUdivEbN/f8kzhfO9DPjL93n
|
||||
p9eudpRmAezdNDdAoHVoNK/T+3t6HA4h2rRDohZ9cxWDVjhDNAnBe+f9LUSrF0No
|
||||
LW1Nvw8+ar6ncCL3c/YZ7U7FQHPUYn7EKoHX3ykk7o2ov/Z6WOBs9LuhHJp14/Pu
|
||||
UaeHHVQQB4uVulQjtxW8FfANRFNImMmw3RcMSCLfC890mHOOu0VtrLD+EkdOjs0k
|
||||
tyzCqL6Se0RN2xpdkdlm
|
||||
=nKI5
|
||||
iQGcBAEBCAAGBQJTBoxWAAoJEJQzkH1pP7W41kML/j62+aGvo1WyyQZT7g1BdKBM
|
||||
U3sYUYSR714Fq4Z0lATCN+nJ9jZza/GMlc4/IDXK96dfb72z/nS4zxjAABnBE2BF
|
||||
qYDPAXjhYuctZQ1OHT2WJPyNsZPy1wIUOimaIGlQ6lA1zXdmPyLmZCNjdkF/+gfj
|
||||
DKVe8eubYxhx1ablVebtHIfccWWVWp3wtHud9xnX81d3lzoTvU7VVXlIedFeKL34
|
||||
V60dbm9OfVeWxuKOP7gpLz1Rz573xaJCJkSsZ7+2JVIuJwD58G6yID2/uD87YiyQ
|
||||
FRtWouC+p5hmiIn3DYo+Zk80BE31qTz3uo0ydS9uLzqESKHGzPvG5gYnaoKpk5II
|
||||
1UJIcWiBFTe5NdICETyXqA9kGxK1wUK40qFFDoWhKObxflfyqnrTxnQdIeYnWH+N
|
||||
VaV1h79T5fME9vmsc7q/QpRlMQV/89kThNFBckSe2A2FabDceuatwn6QwO9GR2vX
|
||||
6xG4vD5SGhfrKOnvE9ECtj3PHlbBdvfq65BnC0hVYg==
|
||||
=F5cv
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
|
||||
;;; protbuf site-lisp configuration
|
||||
|
||||
(add-to-list 'load-path "@SITELISP@")
|
||||
|
||||
(autoload 'protect-buffer-from-kill-mode "protbuf"
|
|
@ -1,16 +1,18 @@
|
|||
# Copyright 1999-2007 Gentoo Foundation
|
||||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/protbuf/protbuf-1.7-r1.ebuild,v 1.2 2007/12/02 14:07:50 opfer Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/protbuf/protbuf-1.7-r1.ebuild,v 1.3 2014/02/20 23:14:09 ulm Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
inherit elisp
|
||||
|
||||
DESCRIPTION="Protect Emacs buffers from accidental killing"
|
||||
HOMEPAGE="http://www.emacswiki.org/cgi-bin/wiki.pl?ProtectingBuffers"
|
||||
HOMEPAGE="http://www.splode.com/~friedman/software/emacs-lisp/
|
||||
http://www.emacswiki.org/emacs/ProtectingBuffers"
|
||||
SRC_URI="mirror://gentoo/${P}.tar.bz2"
|
||||
|
||||
LICENSE="GPL-2"
|
||||
LICENSE="GPL-2+"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 ~ppc x86"
|
||||
IUSE=""
|
||||
|
||||
SITEFILE=51${PN}-gentoo.el
|
||||
SITEFILE="50${PN}-gentoo.el"
|
||||
|
|
|
@ -7,11 +7,18 @@ DIST psgml-1.3.2.tar.gz 252394 SHA256 a020bfe9ab75e325e738726dd850e2b17030b3a5a2
|
|||
EBUILD psgml-1.2.5-r1.ebuild 885 SHA256 130a4aec3175203d61f52ed08db1b748b6f11f5f58bedf51c3f9afff50a9d6f6 SHA512 3e09a46583c3469ebf54d714c1c4f5a1e1d109fd6bded442422f73d83ec8400ab2e6ef10b43503e0ae8e4ca3b22d693917da131dc7fbe3b5f632fbadd98791b5 WHIRLPOOL be2a3da3f6e3437acb187523df3c8f172d0aef8bb4e9c99b50886ddbbde7f5e9d3f99fd3f7a534e3f6531a57072a8e8c559299ed7a840e5c58704cc73ba806b4
|
||||
EBUILD psgml-1.3.2.ebuild 884 SHA256 c917a1b92795b2e64cdc7d6e369f7039d3c3d760938e123cb6ebfde18d7549ca SHA512 14b73ad1d3c5b10123f97e4cccb34913f92ba0b90eede0a962a117c22059c41830c0a73b7de9747a402b73010843747517dae5431b3a7d072c2c2b88d43d2909 WHIRLPOOL a7337bc41fe38c3e2003e7750c71540b0f4cf2b516428f3df2bbba599a682f7597eca97072387bfdac54fe473b7b5f026d6c47cae385b26fd9549d41cf78f038
|
||||
MISC ChangeLog 3771 SHA256 bbc358cfd28d047ed6aa18149037228ac326dc231d6e6edae4be7ee11bd2de48 SHA512 9b5177fe7748ff1ab207c9ae7029dea55d5ed0171d5b9e50b4cdda0461404d52e0a698c1ee3b8101305784b7349fde3bed15f2754006e216e1baa85349ee2f1c WHIRLPOOL 303205093d8e0467e4060128570e1069c6809cce7709d4a9277f50f847f4603ff79ab5858076270428180491be7b679ff3d2d351bb7bebe668f52492b1083f3c
|
||||
MISC metadata.xml 160 SHA256 6c4aff1c3e014ac91491c0d794cb8a644417fd41d86390f3d220d1d1a24b2403 SHA512 99a1e214dcd19fbf598f40fe2851b47fa34ab640070582c38ca57031b5ef23262e7ef68f107100fc4f740f6acefda15cad13f3574d66920ffafba67f7534966a WHIRLPOOL c7715960df6ab404b7e415769125dc55723d17dd0f1f37839a83233588cd799db3d96f751c3cc242438b9c9843a6e694ab764e6f7cea0bc5c7232961ebd23b11
|
||||
MISC metadata.xml 158 SHA256 1393bdef3a74343fdb40a112c7096a1af16f67e7a43413250de28dfe73810eab SHA512 e55d75feae933ba948ae987305ea58e36f5880f18687e8acaf91237e33e251be3ecfd5be27048f4907ea6799e0bcf784b602096dd7e2bc9c450eb5e2bb6a73d2 WHIRLPOOL 1d1676172186235a3e99ca1d148298fb24f6a089f9b7908b3c28c246c8854969835fd3742b8b81e0a30b63d76ee0be0c42bfede2416a30dfc3c8b915a147340c
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.20 (GNU/Linux)
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iEYEAREIAAYFAlHrsBkACgkQCaWpQKGI+9TxuACfS8K8ZJlBRn+29pEJTxBRuHbD
|
||||
sZAAnRKcgsfP0DdoYTzNMUBtJnEuNYRd
|
||||
=Ivas
|
||||
iQGcBAEBCAAGBQJTBlmXAAoJEJQzkH1pP7W4++IL/jgpEfIlRJY4gJJJZ+DoSCFS
|
||||
t1AUWVRkHyUim3y0ZBKNev9st0qfINdrk9Vr1VV1qJiTHWfDdCUV/oDRk71YEiTF
|
||||
FPmP8cxsMrZTP+KeGGsWJPO0s9HX2zKvIRUaiHBtqum0u4eNVR6zpgqj0Xn5Xxsc
|
||||
oQknqD1YyttwB06XwlApoJaZh3wgkthvq5eYpwXjWQRdM4jYYQrUImpOkSRynr4r
|
||||
h+KV4UCnjW6hkE1Kqh47XZI394ScEf0Mi4CA1nMzUUBVS4O0sJNU1orkqhaSljwN
|
||||
OaxBGWTYG1lWfbm+ofRDIQhLXImhqCWK7t6WMwXEFLqs1Q5CmbAk5LUyowaqeu/x
|
||||
nvdyxOPkLh2bXQL/JjZ2PkkuTwgGG7A8pzBaXXkLh8JUBw4RXIQysJIry4MXsZY4
|
||||
K9qrXBgfDPe7tBGq71vvIWpg82zzJgcwQjGEKou9auZ/XNBQ4SsIj9qxSA4SKrVG
|
||||
W6qpaRmEyLHsTPlfjvSuc5JdU9bEUtBVH+X9uAgWpQ==
|
||||
=p3yy
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
|
||||
<pkgmetadata>
|
||||
<herd>emacs</herd>
|
||||
<herd>emacs</herd>
|
||||
</pkgmetadata>
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
# ChangeLog for app-emacs/rfcview
|
||||
# Copyright 2000-2007 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/rfcview/ChangeLog,v 1.9 2007/11/04 17:27:04 ulm Exp $
|
||||
# Copyright 2000-2014 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/rfcview/ChangeLog,v 1.10 2014/02/20 23:46:50 ulm Exp $
|
||||
|
||||
*rfcview-0.13 (20 Feb 2014)
|
||||
|
||||
20 Feb 2014; Ulrich Müller <ulm@gentoo.org> +rfcview-0.13.ebuild:
|
||||
Version bump. New upstream.
|
||||
|
||||
04 Nov 2007; Ulrich Mueller <ulm@gentoo.org> rfcview-0.5.ebuild:
|
||||
amd64 stable, bug 195512
|
||||
|
|
|
@ -1,25 +1,24 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA1
|
||||
Hash: SHA256
|
||||
|
||||
AUX 50rfcview-gentoo.el 206 SHA256 f1d6788d696a0fc6535a6d4c6e70b091d46c7d38bd3feb767466de3c21b55aca SHA512 26745d38c005ae05d6f137c0bfcba33a29ec6ce6a6ca2d7e6fd39c172f3451018ea99a6970f73e5ff99b8562d251b29e8e2425062dc0d6b3a133dac1511ea8f8 WHIRLPOOL 2cc21b21438f1b4df79779e0ab9f72333e5a8b62ee9c6da5d0a06ac83f032ff223a75914eef61d9a89385dec171059d4b9c11b3bfc1de3526017e9f19be29a81
|
||||
AUX 50rfcview-gentoo.el 168 SHA256 46bbda39b134b844be076ad189719834a532406c442cbb2beaec21e29dd3924e SHA512 ed6bec3e4368d4d7e193c5b6ee0493d6c497bce90ec834376371898777a7c3601288bda59232c1ec4920ca20bbcdf4d01ae3d2ea617da55a31568a5824179637 WHIRLPOOL 97a4eaf328300def0ae0e35f7fb20680cf4f5dc7da352624fda0bf41884c977604c1bb594c75e897871f44a946e9b4aa45dc526e02391d676d013b2a8d7a1127
|
||||
DIST rfcview-0.13.el.xz 8836 SHA256 eff317b01824832288abe4e60884665fc22e3dbec315a1fb1779cf679f0a8d89 SHA512 84cda45b5e941808e2ddc50d5f03d7b2d3831208d08dddd2fe2121a20ddcbb7d24b148b2ec2ba07e0b9a04da81ae4d14269d0062955961679ac5c7532de1e6e5 WHIRLPOOL 6f10e4cd4f2d027804f030ff90430b80b89bfbb1df01b4ed8c30fcba049f11d0d3bb192ad18f453d73c81fbf3406b92f92817c3b9c0fa8c74860a371fbd341b1
|
||||
DIST rfcview-0.5.tar.gz 6116 SHA256 b74f7918fd9bd40138f5679f45ff8ecdb31dfde3c1f0d2011e6c0a09fe37a3fb SHA512 b83deb28624123f1fdf105cf287b03e45965b9443bcc89c5f1a12b9595791494384af284517ca1f994eddebc2245202811b4001f4cd8a8bdecd15f117392bc6a WHIRLPOOL 0c6debab4c322c7badb782012bcb7df0d570c62e73da5a5e37177ec469cf9bff48e60aabfa1dacdf3137301e48bcf3eea424e5403d50bd9652cda58b19b44b8c
|
||||
EBUILD rfcview-0.13.ebuild 601 SHA256 b8707e2fe5bfd38439d5d9e48a449e15aefc679f5029f014974fbc577a48c80e SHA512 c2861a23aa47435f017a7779bd71c41aba26fe2269e2bce6ff3ef2d87b20c69c0af002816b41daa307167cae39603e671f63fe2cda8de63b265bf8a380441fc2 WHIRLPOOL 8423e3cb5e7cfb6574951f43bf7ce3c1d04feb31c640bb33be5519e45476c445de2b0b60291de2d83e22a470db9b9b155a33104038efc076fd6353dfc23930f9
|
||||
EBUILD rfcview-0.5.ebuild 493 SHA256 baf17a1f2ac96d47bf9da49a77e5afa8e9a8190d417fcaf19b9791a3c4b61cfb SHA512 ec11fa6f0440ec6471872436bde0eb4dd215afd39afea35e065560ac59af4f441437b08dc52d9218d762164e5582f91c8f3bb3cb8838c9050af1469b1254e0fc WHIRLPOOL 83a4d987b78c276ae8644516a8278ca8df9b047e40b45b14bbf952f0d78b2e100ec0b57b323db096493bc0d4580ff50f7326b7ca5e4fc2c072b0fa0f7b1a0b7c
|
||||
MISC ChangeLog 1115 SHA256 43229a48a475a860ba5318ac8708cbdaae8005e3375e612a82ff85677d36101b SHA512 b27f1c8105883e6c3e74e4fc60ce61a634a1d950b7bd6993c807e30c958f0db00a589706858af1ba0f2bcd277ce60f0ab49a75e1efda239fcf08d6d6f9d77e05 WHIRLPOOL 2632c5f292f31dce4aed12722388aed1ca7e6899ffc96b43a1ae2b738d2d16363bd35982676a6984485231fe89f7f1e66cd5ed9d7864d21004a393f2cea7d213
|
||||
MISC ChangeLog 1245 SHA256 282d041860c5348737cf3049c760cff06ddb4883e77cee7ff86f7e35f5b50f68 SHA512 d0f3a38bc5bc6a1233caa07ab56c6dff16199a002fdb6839ad826c47db50600ab7bb3173f864f01f953486e64465eb57b36dac02e7e2afe89910edfee3c2c204 WHIRLPOOL 36a144c52a88142776c61ef19d7969903b335de09853adeece12e33ea8767e6f458a1dd4449808df2b21a7fd31215c7536f0422691123bfc11da1bb50e8a59a9
|
||||
MISC metadata.xml 158 SHA256 1393bdef3a74343fdb40a112c7096a1af16f67e7a43413250de28dfe73810eab SHA512 e55d75feae933ba948ae987305ea58e36f5880f18687e8acaf91237e33e251be3ecfd5be27048f4907ea6799e0bcf784b602096dd7e2bc9c450eb5e2bb6a73d2 WHIRLPOOL 1d1676172186235a3e99ca1d148298fb24f6a089f9b7908b3c28c246c8854969835fd3742b8b81e0a30b63d76ee0be0c42bfede2416a30dfc3c8b915a147340c
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.19 (GNU/Linux)
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAEBAgAGBQJP9fP3AAoJEDxpGckxwJCBg0QP/ic+TfTOcKsBNpG6jAqFCUoA
|
||||
AOKj6uBP6A1KHicTGSSs/sMOoAGJZgZw85vjgKLcA9rXapjYbBvWNJXXsSGUVbBa
|
||||
0TmemCbQQqAAUnAM088WC7fJvUnK3pVxB7irkF/rZyCGdUL0Jklym0kbOugIcCMd
|
||||
6WCOopeMnTR/uVdNDSG5MRE67NyNDE77GXUrh5bexWbfcKILb1TeF1ATAaEZz2a2
|
||||
Bhv4zalyIoMkNxuY5nB3p21BwmEff5UVadDvSesaxrtHew1QcdstAOjK8GthOkFk
|
||||
o7NSMEwRpcpVvJcaFmcvWXT58F2Q1f2mo2HGJ0Y+xGc2EbtRFGL67rqZgsmHNb2M
|
||||
fhK9vMfjQDr9grll7f2+YiOQR3qKdq4RX55kfxBetqgK1HuSi+YcXErzlQh+Jgp9
|
||||
a8CQw9y+dwNQn+NtXtfDd3wF14DihpimaPTro5Egqo3dc3/NfUYGquVStJo2vzyZ
|
||||
nIYKmAI/pRdgPZzG2InTduelKBF8VCyUIJd2mlodF5ffxJm7EncXU9DaobsYDUSs
|
||||
853l8ERF4W2xmc4f08kgC1Up99KLTCim0EJbUIGZxf2B2hqnrrzk7D6kPu3CHylF
|
||||
CRWH9IIJwGrx8eA91Ann3DKU53Uk6MUFxF0i5qrnDODZhGDIdCphXhkpyaMzPENp
|
||||
YgY/VovXN/eV/2IjDUvc
|
||||
=TqOk
|
||||
iQGcBAEBCAAGBQJTBpQBAAoJEJQzkH1pP7W48P8L/RM6VorX7O4sw62g6bTGUN6J
|
||||
6w/R+BucXYG8Gc2WnjmtFWbNLVzNWvIkiX3VJ7H2tzRsoiXCkQzp5pV5Krrdto9J
|
||||
XhQjJb1IIDuL31YtQEXWvpQa54goRSho+XNnxql8f1ssXlvKbhCK0vfRntI+4NAt
|
||||
vqGhlFugPUhuo6tN2vgD6TYvuX/zI/2lrCS9U/b2WZ5WWEhPMVKnHrZsJIBfFoaJ
|
||||
3O43bL1yD4VFmR54uakONC0ggtcDabWCSkLRxbi4f02cLvKfRL/KXGZlkyGj+djs
|
||||
0cZbAG+XARkaO/Ktocfip87hUhcqOesuEjn5UlFx7b6EQDe4EKRnwN+4SY16KNiu
|
||||
sg4xjauDpZo0cknckNbvy1ioqFka8fPsHNP+HSpglptiod1kweIJpYIMm5jXcDK7
|
||||
bXp5/JOKbPkAfFBheP1H0qm3S3tkhpH6JAaaFlSxF6UBJ7cvH/jLVtiSGZqCLwn3
|
||||
TATZhPNTlVUoXyIqzfNuaoyEt3rb/8BqXMIDLQfGFg==
|
||||
=8d8F
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
|
||||
;;; rfcview site-lisp configuration
|
||||
|
||||
(add-to-list 'load-path "@SITELISP@")
|
||||
(autoload 'rfcview-mode "rfcview" nil t)
|
||||
(add-to-list 'auto-mode-alist
|
||||
|
|
19
app-emacs/rfcview/rfcview-0.13.ebuild
Normal file
19
app-emacs/rfcview/rfcview-0.13.ebuild
Normal file
|
@ -0,0 +1,19 @@
|
|||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emacs/rfcview/rfcview-0.13.ebuild,v 1.1 2014/02/20 23:46:50 ulm Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
inherit elisp
|
||||
|
||||
DESCRIPTION="An Emacs mode that reformats IETF RFCs for display"
|
||||
HOMEPAGE="http://www.loveshack.ukfsn.org/emacs/
|
||||
http://www.emacswiki.org/emacs-de/RfcView"
|
||||
# taken from http://www.loveshack.ukfsn.org/emacs/${PN}.el
|
||||
SRC_URI="http://dev.gentoo.org/~ulm/distfiles/${P}.el.xz"
|
||||
|
||||
LICENSE="GPL-3+"
|
||||
SLOT="0"
|
||||
KEYWORDS="~alpha ~amd64 ~x86"
|
||||
|
||||
SITEFILE="50${PN}-gentoo.el"
|
|
@ -1,6 +1,11 @@
|
|||
# ChangeLog for app-emulation/wine
|
||||
# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/wine/ChangeLog,v 1.496 2014/02/08 21:50:51 tetromino Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/wine/ChangeLog,v 1.497 2014/02/21 06:31:47 tetromino Exp $
|
||||
|
||||
*wine-1.7.13 (21 Feb 2014)
|
||||
|
||||
21 Feb 2014; Alexandre Rostovtsev <tetromino@gentoo.org> +wine-1.7.13.ebuild:
|
||||
Version bump, see http://www.winehq.org/announce/1.7.13 for the announcement.
|
||||
|
||||
*wine-1.7.12 (08 Feb 2014)
|
||||
|
||||
|
|
|
@ -56,6 +56,7 @@ DIST wine-1.7.0.tar.bz2 21217085 SHA256 0106ba3c8f0699cc7ae6edfcf505f7709c9e6d96
|
|||
DIST wine-1.7.10.tar.bz2 21312974 SHA256 44270e4b97ef930e4e4b59088e6e3972e91e85bacf9a9a4d8712a877c9d5cbdb SHA512 157fe4146df3c174643cc1ac29748778aa90fb9e602b417ad772d3da2af3a86307ca818ded860722513efdba57b85e06a2db2869a69a3f579255829dc3d8ac55 WHIRLPOOL eaba07f65c416ce93b9243df402ad0fb5a2f5e7bce43f40b73941f2ea7baddbcab9ce3a999d9086faeaead7552f5d34234cc3b3f3798db2fb98982ef22a98b71
|
||||
DIST wine-1.7.11.tar.bz2 21359534 SHA256 c07d2771ed96c45d428bb11d164c5e4bbe48d6857a0a4cba2e0b73c5f1044f93 SHA512 9743c4cf382b6846d98aa383d9db22cb99bca510ec2db3e9224f10d08095c4a3fe4449b3019d5a6f401458a98696d096a454d00584c667074aed618c47544dcf WHIRLPOOL 38356b5df2c9f5a78b9eb66c6e0f09f7371c57d84f601e6614228b64c629a2c9c222696078d7627df850792a0111e7876fe460c4575bac4accf2f56a391315c6
|
||||
DIST wine-1.7.12.tar.bz2 21366705 SHA256 2dcdff7bf8bac2bc10da85e3e632e8add830f22cf416173e53abca4ec580b392 SHA512 7b5be06dd6d71512884bbcc386fb021725125fb95a4493a033624c2b801eaec7fb4be4b70894ee914da138d8e310da3ac49b8a32538ee21d127201cebc44b449 WHIRLPOOL fb04306058403f82df8cf3e88d21d8011bd2e7cdfa4c31f28e64ea0d24393cd6ed8f61724839a1b5cde272ac8dd854c6c6185e7dee8271881b9b3eb1612f4bbe
|
||||
DIST wine-1.7.13.tar.bz2 21385204 SHA256 a72fdee6e1898007b38f3b30584f86d996567ad8d2f1cc0fe3a877be0493b9df SHA512 ba01933770c0fbaf056fe252b77eb7f2c160f5455450cace638bc288683fb8f6d97421927ec935795eda9aae500bfeb19e6ca8d632822c345f8bfb34b3d27d15 WHIRLPOOL e500fb6cebee9d87aa0c9ed788df37e2f744c0cb1453a6dc20e447dabd9e1becabb00f93ea9272856aa35015703e98b7512c2e233f98e67143abc80b1ae7f182
|
||||
DIST wine-1.7.3.tar.bz2 21489049 SHA256 c66c93c2ffec8d1d9922fbaa226b169d62deb77fcbfd0fbd7379b77dbd97d47f SHA512 41109866b259a5f939c9ca4c26ed0a5ca74fa9cafa2f348b83510dd386459c87ac044a6f954f2f83ce00961d866a6e636ed96aa9e94584b7a79486d434b406cc WHIRLPOOL 90e6aed8930e3496701292415ce87f29a87870a1d00ad26d4f3c4adf33cd296093d0ef3d363bf5cead1ebd5ab4e86907ccb015c10d85f6f90d5f48cd81681b0f
|
||||
DIST wine-1.7.4.tar.bz2 21500746 SHA256 517b3465dbf5b516d3fe886c0f9d4f310dc1d4a38ca4e5580c5d66bab3fb6969 SHA512 4267eb43311fe53537a1864a70e88e4bf444b8979dc858725a1170ed06af4e727604a22bafb3deb448eeb62c170ce67ce8eb8082bce040f5488b1a4c4bc6bb95 WHIRLPOOL 7bb14e0dfd4f9a7411e1d5484dba62f8584a0e03997cc3c6192893dccbc7de316eb79a1e5b0ccf96d20e74cf512ebc79e760076ff4882625bc81b410ad8be0bf
|
||||
DIST wine-1.7.8.tar.bz2 21463503 SHA256 30e17f5f863a09416f3d229666566b318dbb40f683d4ca6630012c60bb511804 SHA512 1fdaddb7909f818050854bf351d20f445cf6a5906b1bcc789c96ee8d5058c90815a91bbbc6444f3e4527748764f03ab5297585c174b433093a3354a827402fea WHIRLPOOL 3b5b18384ff04b80b936160c2c6e03676d69663c023f484981305c9272d0601b74cda5c5f7d56008b3900d702b1a4fe1929f16b1fba304a6480b076ffede663a
|
||||
|
@ -149,22 +150,23 @@ EBUILD wine-1.7.0.ebuild 12421 SHA256 411f57e42e30b82d4c1ac099689281582d6f88b6e1
|
|||
EBUILD wine-1.7.10.ebuild 12756 SHA256 6241d5d9da059712d0f304ff5124f6321c0089d7294be673c20f67fa06f373ba SHA512 fc762b1eedbcfb0cbb204ce601975408d6595c243be22b732c890f093d7157a6a51567e7c74c3497ec0fef203f7a816a1a7fe2bbddd2ed063f2b80977a1b7107 WHIRLPOOL 7411c9db26a9987fcc901effe4d4935220374ae4424da1605c49bf75cbb6563c24068498fa0b1afd4f754ed5b43ea82b9c54bd5dd392dace4bee7d745e1ac2ed
|
||||
EBUILD wine-1.7.11.ebuild 12756 SHA256 67876f88ce08ae48cb0b8e450a189bd71cb14e1c9e60d35918c78ff55ae6921e SHA512 92a6eff8da9c16dd5206568ae2eaa41bd4c524ffdd76a9913b9b30d179f19f026585eca52aa19e8076e1234976dcfa9ba722e7284099a5abb15bf2cd17a46088 WHIRLPOOL f3bef1cf062095352c9178f0e88490ad05b0c58113e5f2b7dfed20b2520809cb16730e1061f01b2765dd3d90f5b365ab6fec2f5ab8be2d186be37ef5348d5cc2
|
||||
EBUILD wine-1.7.12.ebuild 12757 SHA256 232d537fb88664ad4e7851ca5ba3d6240243cc535eb77505b53f3c07dbc00fa6 SHA512 de5c7f6abd81b30b77c5d04bc6ec5def62db502f004af6a398ed29296e530d2b23615dc2a46a154ee48be569d0f74eca64a9611c1af3c0003788bfb672a2cfb2 WHIRLPOOL 643f45280cfac304df09c74e5fc686368f24003cc593c4ec7c84967390c4fd0f3ebf5a653253f362b547b9386e1bdf735eea363c23fcc36224b9931c33a51f33
|
||||
EBUILD wine-1.7.13.ebuild 12757 SHA256 dded05f5a7ba99818f2740420e03614fcd4201d56f00f2bdc1b1d7c0b129aff9 SHA512 61feb4629065435b78bb59c071526d625e62dfcd0e4071bc6c91278ba3eeb322701eb2700f242e9a80cbb9ae9463a6828bc5dbc95acabfd598e7b589935806de WHIRLPOOL 118853eb74f49fbecda867bb99324106724bc7191e65ad634fb00b778aa4d94cda58556184a597df734b29281fcb82337cd24dbd9bf6e096eeeb4fa3f3b700c8
|
||||
EBUILD wine-1.7.3.ebuild 12423 SHA256 58d6df01c3bede22cb1c84e2b682e273d73060bd869dad74a7d14aa94f2c2aa5 SHA512 5aea1a2b1fa41f3eb61936820aca4c96b7dd404671772894a199cbf12b721f9746ec837020d464c37f49d7da6a4cbd70ffa89746588854a8513a5d16b953d747 WHIRLPOOL 5f267b3b58f5b0e8b6780abf30229e292c836542f684c34042644e28642fab53dccadcb043a22f279e94d5a8f822f8ec2262e1b2cdcdff227c94bf4f13c02dec
|
||||
EBUILD wine-1.7.4.ebuild 12423 SHA256 7ef9808dc6efaf8c1fb60407b79ef3a19ab112a21d33f5e34188e3962641d2f9 SHA512 fe9281355ae372866431a68b276327cd3e5cf55887aee7eee6d989e1e6fe5e9f4f0fe9e2bcb3c681f886ca57ba26786cf09eee90f66a87d62fa4882775f5775b WHIRLPOOL e4247512391929136600c3d37ecfc6f757cc1a91ae179e73dc30e73d23f7cdaa4a3678d69bdb96951afa4b2a5a189fdb8ef22f5cbe736675839f58ccd916cdea
|
||||
EBUILD wine-1.7.8.ebuild 12754 SHA256 d6c8decb636bd23b1deba6677bf3167515bd9555ce86d91461c8d6595f17c412 SHA512 94622108c0733bce3c6f60cec2d2dc684228e77d2eaa6f90256e3070186881cd142084feec69098dc460727a06c0e9aed2a6ce9d4082023f0d03b24fb5be3d77 WHIRLPOOL bfd3793ff8530ddf5c76b543a16286af1fc841b6ba4e18573910b5ba6e3de663a180c699266a9dedec71f324b4eee15bc9b99c8acd1e50e9f4ca4bdbea1638bf
|
||||
EBUILD wine-1.7.9.ebuild 12754 SHA256 cde2305629c14b891331fc2953a5c32b8f7cc9da23e9ace13b5fd3a78100a5fc SHA512 0b5e5e5ec720a3a91e0e1605ed7de09cf2b86675b170293c1cade2a7e70d3d31b956013a36e216324e75845928f0c540584293775b9648831a790eb125bf2052 WHIRLPOOL db9a0dd9a4562eb6ba3172970a1e0e4d094107824b43fa5dade5787f6d3fe7d3e474247d4aec8f95b8c78b67123249fd82b9a67eeeb9573fad3ed0a2ab6eefaf
|
||||
EBUILD wine-9999.ebuild 12757 SHA256 439e2dfa6696c97df9539f0460015b363a57d3ed60ce338729866b8741ee91ed SHA512 3f5d20b5edb81ae5e106b050f72379db96c81812d900521cff2a2b2db8e0800a63b958b615ac609078143b74d76a045f7c506850fc46406bace8443cb1355f52 WHIRLPOOL 384d9bd51d369b90013efb599bc03d84934c121656d8c66021a9e9bc4d0919e2f1ccacc23bffb4aadeef2dd6d3b6faade9062a002d403581ec35e8f88268ed72
|
||||
MISC ChangeLog 17312 SHA256 be86b74c30560d2312de640044267a76bb307c3ab7c011c7d927afb9842ea35f SHA512 c180dfc9cea75a52e91a97b95a505c0bf7827cd67770245fe02198f12dbb131a1cc745f9cc6efe8d764c8ff85d92ddfc8c421b7d05fbcd26983db4ca5b7fb01d WHIRLPOOL 37f28c70b4ae7a80612468f13a4852ffed411bea36eed2982debb89fda52e23415951af0bc15ea92f9fa3e2c1db4a7bb02a120c76492d1bd89491da6eed15e94
|
||||
MISC ChangeLog 17501 SHA256 c786d8d6a0d8b456b1cb624516658e745d06a7cbe4e97a4f23c1f2c03662359e SHA512 6aa39f5c6bcda9848fb739a6b3e41b2d2b4dd66c56d621e14c69772752520ca470ded8986bbbe04c1fe8c64b393f1eb7054bf5df7098f96cceb365ee4c418528 WHIRLPOOL 157e47b7264c6bdd9f5c0ae3945d94d283aa5aad9d1c6fbb08c8c2be4b7f2d9367b843327d7c9c134015789e9471fd6aaa2d0f60486f3dd3f361674717f6f7a1
|
||||
MISC ChangeLog-2012 100362 SHA256 8e70fc54e7945c1f41e3e0b64fef6b9a7fe89acdaf8c79a06a16048fe8d2e26c SHA512 ca875e847ba100e1f19774b31a2b45a81d776275e3d11944be8a7b01dfcdbf4265b1a340d691bc4fe4054fea006059a06ed52bc0516b1f8b44a1772a1c813278 WHIRLPOOL 36ec708601a25cb8fa93b471112538480b6ef82cc4e6703b3d045f883078b49209ceaeef7bafa8417b881c2d11df84df9c83d1985d0d687a11f3db3de5abb014
|
||||
MISC metadata.xml 2236 SHA256 2b4d3de73fa84f3f3d192e3d29d8fd22796d4c5630151a380c3c33597263436e SHA512 884a7aa53e7694cec121453103bf3873cba1a8323f8a6ee5fc5e326b05610f1c2d36c07bc357c12777749a33f0ebf986f78341fea5c752dc14f3ab4b90f137a5 WHIRLPOOL 3a2b66e0af17c2e260621e5e065ece87be1a355c8da5bf3c8638f360ed5d1dcd062c44b0e26e72a708e5bc4fb5d8e054e0049ab58b090fc2fe5ed6e2cdee9c19
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQEcBAEBCAAGBQJS9qaKAAoJEJ0WA1zPCt1h2EIIAJWLSSAxO9+vdBVHYynf8bPd
|
||||
d/AuDt3sB5INr/1R5jL/9dPIhUu/FCf3ybcVKNAuWdE+JRu28VtJQZqSeNwF5kfq
|
||||
QI590GOuWJQRyjEAhxciyP2dB2VqSHE8T6Vlbkz7jFHh6sMWW2SjwNjD+JsIeyoK
|
||||
Lmte0TGATDGPgw7zOyczGUoZXWFdLeYA8vO62LnAAX4dj77wkQToPRUxQMcjt7Pj
|
||||
F/TnCxDECPBmo3dwUkcBpnSejM3vinkobPXA9jRj5j19oDduRa7gnwqwWpJH8Kes
|
||||
x+ThgSYMmNV6Hri8v5lPc2zuxgeWLxGLVYbi5CSAuw4XjMBkq1cRYQd3rj0ClTY=
|
||||
=YNuF
|
||||
iQEcBAEBCAAGBQJTBvKlAAoJEJ0WA1zPCt1h/BEH/1n6itq7jYnk2VGd0yUxxivL
|
||||
FcKcCKDU3mJe+QvxPml+rlV33s1msha9EKhpQ29ZjYuFQ+Ug4uEzzVS7D4bZmOzr
|
||||
14k1j/7Hj2Kr5W6wqG80I5/hxEv1+BbQxr40bNqfcAkqW40oqGpuopCm7J2aBkLr
|
||||
bGiu/6oP04KD9796L2bbf3ymbFcLEnwOj/5Nk4/HkbTYE+qijSclrbOPOLNzb2YF
|
||||
o3CLfMRmGc+fl92tlSFG+YsdFjZNA2fDWEj+tU8loQUAJ6Z4y4hlmb/2d0KavbDG
|
||||
i6i6rvnvWWYe8GvSNvqTPCWiceqEAjo9uklb9aQjoB7pBdQLHQbMIK4c0vYTxa0=
|
||||
=dXRM
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
436
app-emulation/wine/wine-1.7.13.ebuild
Normal file
436
app-emulation/wine/wine-1.7.13.ebuild
Normal file
|
@ -0,0 +1,436 @@
|
|||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/wine/wine-1.7.13.ebuild,v 1.1 2014/02/21 06:31:47 tetromino Exp $
|
||||
|
||||
EAPI="5"
|
||||
|
||||
AUTOTOOLS_AUTORECONF=1
|
||||
PLOCALES="ar bg ca cs da de el en en_US eo es fa fi fr he hi hr hu it ja ko lt ml nb_NO nl or pa pl pt_BR pt_PT rm ro ru sk sl sr_RS@cyrillic sr_RS@latin sv te th tr uk wa zh_CN zh_TW"
|
||||
PLOCALE_BACKUP="en"
|
||||
|
||||
inherit autotools-multilib eutils fdo-mime flag-o-matic gnome2-utils l10n multilib pax-utils toolchain-funcs virtualx
|
||||
|
||||
if [[ ${PV} == "9999" ]] ; then
|
||||
EGIT_REPO_URI="git://source.winehq.org/git/wine.git"
|
||||
inherit git-2
|
||||
SRC_URI=""
|
||||
#KEYWORDS=""
|
||||
else
|
||||
MY_P="${PN}-${PV/_/-}"
|
||||
SRC_URI="mirror://sourceforge/${PN}/Source/${MY_P}.tar.bz2"
|
||||
KEYWORDS="-* ~amd64 ~x86 ~x86-fbsd"
|
||||
S=${WORKDIR}/${MY_P}
|
||||
fi
|
||||
|
||||
GV="2.24"
|
||||
MV="4.5.2"
|
||||
PULSE_PATCHES="winepulse-patches-1.7.12"
|
||||
WINE_GENTOO="wine-gentoo-2013.06.24"
|
||||
DESCRIPTION="Free implementation of Windows(tm) on Unix"
|
||||
HOMEPAGE="http://www.winehq.org/"
|
||||
SRC_URI="${SRC_URI}
|
||||
gecko? (
|
||||
abi_x86_32? ( mirror://sourceforge/${PN}/Wine%20Gecko/${GV}/wine_gecko-${GV}-x86.msi )
|
||||
abi_x86_64? ( mirror://sourceforge/${PN}/Wine%20Gecko/${GV}/wine_gecko-${GV}-x86_64.msi )
|
||||
)
|
||||
mono? ( mirror://sourceforge/${PN}/Wine%20Mono/${MV}/wine-mono-${MV}.msi )
|
||||
pulseaudio? ( http://dev.gentoo.org/~tetromino/distfiles/${PN}/${PULSE_PATCHES}.tar.bz2 )
|
||||
http://dev.gentoo.org/~tetromino/distfiles/${PN}/${WINE_GENTOO}.tar.bz2"
|
||||
|
||||
LICENSE="LGPL-2.1"
|
||||
SLOT="0"
|
||||
IUSE="+abi_x86_32 +abi_x86_64 +alsa capi cups custom-cflags dos elibc_glibc +fontconfig +gecko gphoto2 gsm gstreamer +jpeg lcms ldap +mono mp3 ncurses netapi nls odbc openal opencl +opengl osmesa oss +perl +png +prelink pulseaudio +realtime +run-exes samba scanner selinux +ssl test +threads +truetype +udisks v4l +X xcomposite xinerama +xml"
|
||||
REQUIRED_USE="|| ( abi_x86_32 abi_x86_64 )
|
||||
test? ( abi_x86_32 )
|
||||
elibc_glibc? ( threads )
|
||||
mono? ( abi_x86_32 )
|
||||
osmesa? ( opengl )" #286560
|
||||
|
||||
# FIXME: the test suite is unsuitable for us; many tests require net access
|
||||
# or fail due to Xvfb's opengl limitations.
|
||||
RESTRICT="test"
|
||||
|
||||
NATIVE_DEPEND="
|
||||
truetype? ( >=media-libs/freetype-2.0.0 )
|
||||
capi? ( net-dialup/capi4k-utils )
|
||||
ncurses? ( >=sys-libs/ncurses-5.2:= )
|
||||
udisks? ( sys-apps/dbus )
|
||||
fontconfig? ( media-libs/fontconfig:= )
|
||||
gphoto2? ( media-libs/libgphoto2:= )
|
||||
openal? ( media-libs/openal:= )
|
||||
gstreamer? ( media-libs/gstreamer:0.10 media-libs/gst-plugins-base:0.10 )
|
||||
X? (
|
||||
x11-libs/libXcursor
|
||||
x11-libs/libXext
|
||||
x11-libs/libXrandr
|
||||
x11-libs/libXi
|
||||
x11-libs/libXxf86vm
|
||||
)
|
||||
xinerama? ( x11-libs/libXinerama )
|
||||
alsa? ( media-libs/alsa-lib )
|
||||
cups? ( net-print/cups:= )
|
||||
opencl? ( virtual/opencl )
|
||||
opengl? (
|
||||
virtual/glu
|
||||
virtual/opengl
|
||||
)
|
||||
gsm? ( media-sound/gsm:= )
|
||||
jpeg? ( virtual/jpeg:0= )
|
||||
ldap? ( net-nds/openldap:= )
|
||||
lcms? ( media-libs/lcms:2= )
|
||||
mp3? ( >=media-sound/mpg123-1.5.0 )
|
||||
netapi? ( net-fs/samba[netapi(+)] )
|
||||
nls? ( sys-devel/gettext )
|
||||
odbc? ( dev-db/unixODBC:= )
|
||||
osmesa? ( media-libs/mesa[osmesa] )
|
||||
pulseaudio? ( media-sound/pulseaudio )
|
||||
xml? ( dev-libs/libxml2 dev-libs/libxslt )
|
||||
scanner? ( media-gfx/sane-backends:= )
|
||||
ssl? ( net-libs/gnutls:= )
|
||||
png? ( media-libs/libpng:0= )
|
||||
v4l? ( media-libs/libv4l )
|
||||
xcomposite? ( x11-libs/libXcomposite )"
|
||||
|
||||
COMMON_DEPEND="
|
||||
!amd64? ( ${NATIVE_DEPEND} )
|
||||
amd64? (
|
||||
abi_x86_64? ( ${NATIVE_DEPEND} )
|
||||
abi_x86_32? (
|
||||
truetype? ( || (
|
||||
>=app-emulation/emul-linux-x86-xlibs-2.1[development]
|
||||
>=media-libs/freetype-2.0.0[abi_x86_32]
|
||||
) )
|
||||
ncurses? ( || (
|
||||
app-emulation/emul-linux-x86-baselibs[development]
|
||||
sys-libs/ncurses[abi_x86_32]
|
||||
) )
|
||||
udisks? ( || (
|
||||
>=app-emulation/emul-linux-x86-baselibs-20130224[development]
|
||||
sys-apps/dbus[abi_x86_32]
|
||||
) )
|
||||
fontconfig? ( || (
|
||||
app-emulation/emul-linux-x86-xlibs[development]
|
||||
media-libs/fontconfig[abi_x86_32]
|
||||
) )
|
||||
gphoto2? (
|
||||
app-emulation/emul-linux-x86-medialibs[development]
|
||||
)
|
||||
openal? ( || (
|
||||
app-emulation/emul-linux-x86-sdl[development]
|
||||
media-libs/openal[abi_x86_32]
|
||||
) )
|
||||
gstreamer? (
|
||||
app-emulation/emul-linux-x86-gstplugins
|
||||
app-emulation/emul-linux-x86-medialibs[development]
|
||||
)
|
||||
X? ( || (
|
||||
app-emulation/emul-linux-x86-xlibs[development]
|
||||
(
|
||||
x11-libs/libXcursor[abi_x86_32]
|
||||
x11-libs/libXext[abi_x86_32]
|
||||
x11-libs/libXrandr[abi_x86_32]
|
||||
x11-libs/libXi[abi_x86_32]
|
||||
x11-libs/libXxf86vm[abi_x86_32]
|
||||
)
|
||||
) )
|
||||
xinerama? ( || (
|
||||
app-emulation/emul-linux-x86-xlibs[development]
|
||||
x11-libs/libXinerama[abi_x86_32]
|
||||
) )
|
||||
alsa? ( || (
|
||||
app-emulation/emul-linux-x86-soundlibs[alsa,development]
|
||||
media-libs/alsa-lib[abi_x86_32]
|
||||
) )
|
||||
cups? ( app-emulation/emul-linux-x86-baselibs )
|
||||
opencl? ( virtual/opencl[abi_x86_32] )
|
||||
opengl? ( || (
|
||||
app-emulation/emul-linux-x86-opengl[development]
|
||||
(
|
||||
virtual/glu[abi_x86_32]
|
||||
virtual/opengl[abi_x86_32]
|
||||
)
|
||||
) )
|
||||
gsm? ( || (
|
||||
app-emulation/emul-linux-x86-soundlibs[development]
|
||||
media-sound/gsm[abi_x86_32]
|
||||
) )
|
||||
jpeg? ( || (
|
||||
app-emulation/emul-linux-x86-baselibs[development]
|
||||
virtual/jpeg:0[abi_x86_32]
|
||||
) )
|
||||
ldap? ( app-emulation/emul-linux-x86-baselibs[development] )
|
||||
lcms? ( || (
|
||||
app-emulation/emul-linux-x86-baselibs[development]
|
||||
media-libs/lcms:2[abi_x86_32]
|
||||
) )
|
||||
mp3? ( || (
|
||||
app-emulation/emul-linux-x86-soundlibs[development]
|
||||
>=media-sound/mpg123-1.5.0[abi_x86_32]
|
||||
) )
|
||||
nls? ( app-emulation/emul-linux-x86-baselibs[development] )
|
||||
odbc? ( app-emulation/emul-linux-x86-db[development] )
|
||||
osmesa? ( || (
|
||||
>=app-emulation/emul-linux-x86-opengl-20121028[development]
|
||||
media-libs/mesa[osmesa,abi_x86_32]
|
||||
) )
|
||||
pulseaudio? ( || (
|
||||
app-emulation/emul-linux-x86-soundlibs[development]
|
||||
>=media-sound/pulseaudio-4.0-r1[abi_x86_32]
|
||||
) )
|
||||
xml? ( >=app-emulation/emul-linux-x86-baselibs-20131008[development] )
|
||||
scanner? ( app-emulation/emul-linux-x86-medialibs[development] )
|
||||
ssl? ( app-emulation/emul-linux-x86-baselibs[development] )
|
||||
png? ( || (
|
||||
app-emulation/emul-linux-x86-baselibs[development]
|
||||
media-libs/libpng:0[abi_x86_32]
|
||||
) )
|
||||
v4l? ( || (
|
||||
app-emulation/emul-linux-x86-medialibs[development]
|
||||
media-libs/libv4l[abi_x86_32]
|
||||
) )
|
||||
xcomposite? ( || (
|
||||
app-emulation/emul-linux-x86-xlibs[development]
|
||||
x11-libs/libXcomposite[abi_x86_32]
|
||||
) )
|
||||
)
|
||||
)"
|
||||
|
||||
RDEPEND="${COMMON_DEPEND}
|
||||
dos? ( games-emulation/dosbox )
|
||||
perl? ( dev-lang/perl dev-perl/XML-Simple )
|
||||
samba? ( >=net-fs/samba-3.0.25 )
|
||||
selinux? ( sec-policy/selinux-wine )
|
||||
udisks? ( sys-fs/udisks:2 )
|
||||
pulseaudio? ( realtime? ( sys-auth/rtkit ) )"
|
||||
|
||||
DEPEND="${COMMON_DEPEND}
|
||||
amd64? ( abi_x86_32? ( !abi_x86_64? ( ${NATIVE_DEPEND} ) ) )
|
||||
X? (
|
||||
x11-proto/inputproto
|
||||
x11-proto/xextproto
|
||||
x11-proto/xf86vidmodeproto
|
||||
)
|
||||
xinerama? ( x11-proto/xineramaproto )
|
||||
prelink? ( sys-devel/prelink )
|
||||
>=sys-kernel/linux-headers-2.6
|
||||
virtual/pkgconfig
|
||||
virtual/yacc
|
||||
sys-devel/flex"
|
||||
|
||||
# These use a non-standard "Wine" category, which is provided by
|
||||
# /etc/xdg/applications-merged/wine.menu
|
||||
QA_DESKTOP_FILE="usr/share/applications/wine-browsedrive.desktop
|
||||
usr/share/applications/wine-notepad.desktop
|
||||
usr/share/applications/wine-uninstaller.desktop
|
||||
usr/share/applications/wine-winecfg.desktop"
|
||||
|
||||
wine_build_environment_check() {
|
||||
[[ ${MERGE_TYPE} = "binary" ]] && return 0
|
||||
|
||||
if use abi_x86_64 && [[ $(( $(gcc-major-version) * 100 + $(gcc-minor-version) )) -lt 404 ]]; then
|
||||
eerror "You need gcc-4.4+ to build 64-bit wine"
|
||||
eerror
|
||||
return 1
|
||||
fi
|
||||
|
||||
if use abi_x86_32 && use opencl && [[ x$(eselect opencl show 2> /dev/null) = "xintel" ]]; then
|
||||
eerror "You cannot build wine with USE=opencl because intel-ocl-sdk is 64-bit only."
|
||||
eerror "See https://bugs.gentoo.org/487864 for more details."
|
||||
eerror
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
pkg_pretend() {
|
||||
wine_build_environment_check || die
|
||||
}
|
||||
|
||||
pkg_setup() {
|
||||
wine_build_environment_check || die
|
||||
}
|
||||
|
||||
src_unpack() {
|
||||
if [[ ${PV} == "9999" ]] ; then
|
||||
git-2_src_unpack
|
||||
else
|
||||
unpack ${MY_P}.tar.bz2
|
||||
fi
|
||||
|
||||
use pulseaudio && unpack "${PULSE_PATCHES}.tar.bz2"
|
||||
unpack "${WINE_GENTOO}.tar.bz2"
|
||||
|
||||
l10n_find_plocales_changes "${S}/po" "" ".po"
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
local md5="$(md5sum server/protocol.def)"
|
||||
local PATCHES=(
|
||||
"${FILESDIR}"/${PN}-1.5.26-winegcc.patch #260726
|
||||
"${FILESDIR}"/${PN}-1.4_rc2-multilib-portage.patch #395615
|
||||
"${FILESDIR}"/${PN}-1.7.12-osmesa-check.patch #429386
|
||||
"${FILESDIR}"/${PN}-1.6-memset-O3.patch #480508
|
||||
)
|
||||
use pulseaudio && PATCHES+=(
|
||||
"../${PULSE_PATCHES}"/*.patch #421365
|
||||
)
|
||||
|
||||
autotools-utils_src_prepare
|
||||
|
||||
if [[ "$(md5sum server/protocol.def)" != "${md5}" ]]; then
|
||||
einfo "server/protocol.def was patched; running tools/make_requests"
|
||||
tools/make_requests || die #432348
|
||||
fi
|
||||
sed -i '/^UPDATE_DESKTOP_DATABASE/s:=.*:=true:' tools/Makefile.in || die
|
||||
if ! use run-exes; then
|
||||
sed -i '/^MimeType/d' tools/wine.desktop || die #117785
|
||||
fi
|
||||
|
||||
# hi-res default icon, #472990, http://bugs.winehq.org/show_bug.cgi?id=24652
|
||||
cp "${WORKDIR}"/${WINE_GENTOO}/icons/oic_winlogo.ico dlls/user32/resources/ || die
|
||||
|
||||
l10n_get_locales > po/LINGUAS # otherwise wine doesn't respect LINGUAS
|
||||
}
|
||||
|
||||
do_configure() {
|
||||
local myeconfargs=( "${myeconfargs[@]}" )
|
||||
|
||||
if use amd64; then
|
||||
if [[ ${ABI} == amd64 ]]; then
|
||||
myeconfargs+=( --enable-win64 )
|
||||
else
|
||||
use netapi && ewarn "Disabling netapi in wine32; see https://bugs.gentoo.org/494394"
|
||||
# We currently don't have 32-bit libnetapi on amd64; #494394
|
||||
myeconfargs+=(
|
||||
--without-netapi
|
||||
--disable-win64
|
||||
)
|
||||
fi
|
||||
|
||||
# Note: using --with-wine64 results in problems with multilib.eclass
|
||||
# CC/LD hackery. We're using separate tools instead.
|
||||
fi
|
||||
|
||||
autotools-utils_src_configure
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
export LDCONFIG=/bin/true
|
||||
use custom-cflags || strip-flags
|
||||
|
||||
local myeconfargs=( # common
|
||||
--sysconfdir=/etc/wine
|
||||
$(use_with alsa)
|
||||
$(use_with capi)
|
||||
$(use_with lcms cms)
|
||||
$(use_with cups)
|
||||
$(use_with ncurses curses)
|
||||
$(use_with udisks dbus)
|
||||
$(use_with fontconfig)
|
||||
$(use_with ssl gnutls)
|
||||
$(use_with gphoto2 gphoto)
|
||||
$(use_with gsm)
|
||||
$(use_with gstreamer)
|
||||
--without-hal
|
||||
$(use_with jpeg)
|
||||
$(use_with ldap)
|
||||
$(use_with mp3 mpg123)
|
||||
$(use_with netapi)
|
||||
$(use_with nls gettext)
|
||||
$(use_with openal)
|
||||
$(use_with opencl)
|
||||
$(use_with opengl)
|
||||
$(use_with osmesa)
|
||||
$(use_with oss)
|
||||
$(use_with png)
|
||||
$(use_with threads pthread)
|
||||
$(use_with scanner sane)
|
||||
$(use_enable test tests)
|
||||
$(use_with truetype freetype)
|
||||
$(use_with v4l)
|
||||
$(use_with X x)
|
||||
$(use_with xcomposite)
|
||||
$(use_with xinerama)
|
||||
$(use_with xml)
|
||||
$(use_with xml xslt)
|
||||
)
|
||||
|
||||
use pulseaudio && myeconfargs+=( --with-pulse )
|
||||
|
||||
if use amd64 && use abi_x86_32; then
|
||||
# Avoid crossdev's i686-pc-linux-gnu-pkg-config if building wine32 on amd64; #472038
|
||||
# set AR and RANLIB to make QA scripts happy; #483342
|
||||
tc-export PKG_CONFIG AR RANLIB
|
||||
fi
|
||||
|
||||
multilib_parallel_foreach_abi do_configure
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
autotools-multilib_src_compile depend
|
||||
autotools-multilib_src_compile all
|
||||
}
|
||||
|
||||
src_test() {
|
||||
if [[ $(id -u) == 0 ]]; then
|
||||
ewarn "Skipping tests since they cannot be run under the root user."
|
||||
ewarn "To run the test ${PN} suite, add userpriv to FEATURES in make.conf"
|
||||
return
|
||||
fi
|
||||
|
||||
# FIXME: win32-only; wine64 tests fail with "could not find the Wine loader"
|
||||
multilib_toolchain_setup x86
|
||||
local BUILD_DIR="${S}-${ABI}"
|
||||
cd "${BUILD_DIR}" || die
|
||||
WINEPREFIX="${T}/.wine-${ABI}" Xemake test
|
||||
}
|
||||
|
||||
src_install() {
|
||||
local DOCS=( ANNOUNCE AUTHORS README )
|
||||
add_locale_docs() {
|
||||
local locale_doc="documentation/README.$1"
|
||||
[[ ! -e ${locale_doc} ]] || DOCS=( "${DOCS[@]}" ${locale_doc} )
|
||||
}
|
||||
l10n_for_each_locale_do add_locale_docs
|
||||
autotools-multilib_src_install
|
||||
|
||||
emake -C "../${WINE_GENTOO}" install DESTDIR="${D}" EPREFIX="${EPREFIX}"
|
||||
if use gecko ; then
|
||||
insinto /usr/share/wine/gecko
|
||||
use abi_x86_32 && doins "${DISTDIR}"/wine_gecko-${GV}-x86.msi
|
||||
use abi_x86_64 && doins "${DISTDIR}"/wine_gecko-${GV}-x86_64.msi
|
||||
fi
|
||||
if use mono ; then
|
||||
insinto /usr/share/wine/mono
|
||||
doins "${DISTDIR}"/wine-mono-${MV}.msi
|
||||
fi
|
||||
if ! use perl ; then
|
||||
rm "${D}"usr/bin/{wine{dump,maker},function_grep.pl} "${D}"usr/share/man/man1/wine{dump,maker}.1 || die
|
||||
fi
|
||||
|
||||
use abi_x86_32 && pax-mark psmr "${D}"usr/bin/wine{,-preloader} #255055
|
||||
use abi_x86_64 && pax-mark psmr "${D}"usr/bin/wine64{,-preloader}
|
||||
|
||||
if use abi_x86_64 && ! use abi_x86_32; then
|
||||
dosym /usr/bin/wine{64,} # 404331
|
||||
dosym /usr/bin/wine{64,}-preloader
|
||||
fi
|
||||
|
||||
# respect LINGUAS when installing man pages, #469418
|
||||
for l in de fr pl; do
|
||||
use linguas_${l} || rm -r "${D}"usr/share/man/${l}*
|
||||
done
|
||||
}
|
||||
|
||||
pkg_preinst() {
|
||||
gnome2_icon_savelist
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
gnome2_icon_cache_update
|
||||
fdo-mime_desktop_database_update
|
||||
}
|
||||
|
||||
pkg_postrm() {
|
||||
gnome2_icon_cache_update
|
||||
fdo-mime_desktop_database_update
|
||||
}
|
|
@ -1,6 +1,41 @@
|
|||
# ChangeLog for app-emulation/xen-tools
|
||||
# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/xen-tools/ChangeLog,v 1.225 2014/02/20 10:24:16 ago Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/xen-tools/ChangeLog,v 1.228 2014/02/21 04:49:13 idella4 Exp $
|
||||
|
||||
21 Feb 2014; Ian Delaney <idella4@gentoo.org> xen-tools-4.2.3-r1.ebuild,
|
||||
xen-tools-4.2.4.ebuild, xen-tools-4.3.2.ebuild:
|
||||
correct typos, tidy
|
||||
|
||||
20 Feb 2014; Yixun Lan <dlan@gentoo.org>
|
||||
-files/xen-4-CVE-2013-0215-XSA-38.patch,
|
||||
-files/xen-4-CVE-2013-1919-XSA-46.patch,
|
||||
-files/xen-4-CVE-2013-1922-XSA-48.patch,
|
||||
-files/xen-4-CVE-2013-1952-XSA-49.patch,
|
||||
-files/xen-4-CVE-2013-1952-XSA_49.patch,
|
||||
-files/xen-4-CVE-2013-2072-XSA-56.patch,
|
||||
-files/xen-4.2-CVE-2013-1-XSA-55.patch,
|
||||
-files/xen-4.2-CVE-2013-12to13-XSA-55.patch,
|
||||
-files/xen-4.2-CVE-2013-14-XSA-55.patch,
|
||||
-files/xen-4.2-CVE-2013-16-XSA-55.patch,
|
||||
-files/xen-4.2-CVE-2013-17-XSA-55.patch,
|
||||
-files/xen-4.2-CVE-2013-18to19-XSA-55.patch,
|
||||
-files/xen-4.2-CVE-2013-2-XSA-55.patch,
|
||||
-files/xen-4.2-CVE-2013-20to23-XSA-55.patch,
|
||||
-files/xen-4.2-CVE-2013-3-XSA-55.patch,
|
||||
-files/xen-4.2-CVE-2013-4-XSA-55.patch,
|
||||
-files/xen-4.2-CVE-2013-5to7-XSA-55.patch,
|
||||
-files/xen-4.2-CVE-2013-6-XSA-55.patch,
|
||||
-files/xen-4.2-CVE-2013-7-XSA-55.patch,
|
||||
-files/xen-4.2-CVE-2013-9to10-XSA-55.patch, -files/xen-4.2-CVE-XSA-57.patch,
|
||||
-files/xen-tools-4-CVE-2013-4369-XSA-68.patch,
|
||||
-files/xen-tools-4-CVE-2013-4370-XSA-69.patch,
|
||||
-files/xen-tools-4-CVE-2013-4371-XSA-70.patch,
|
||||
-files/xen-tools-4-CVE-2013-4416-XSA-72.patch:
|
||||
clean up unused XSA patches
|
||||
|
||||
20 Feb 2014; Yixun Lan <dlan@gentoo.org> -xen-tools-4.2.2-r3.ebuild,
|
||||
-xen-tools-4.2.2-r7.ebuild, -xen-tools-4.2.3.ebuild:
|
||||
drop old ebuild, clean up
|
||||
|
||||
20 Feb 2014; Agostino Sarubbo <ago@gentoo.org> xen-tools-4.2.3-r1.ebuild:
|
||||
Stable for x86, wrt bug #500530
|
||||
|
|
|
@ -6,30 +6,9 @@ AUX ipxe-nopie.patch 964 SHA256 0b70407969735f36587fade77f524c1c2077f28585b9e0df
|
|||
AUX qemu-bridge.patch 3808 SHA256 73155306c318b7a9304eb5b7798f1d2aaf009f45af4d4dcbbc3beeb7ced013b6 SHA512 be35481ea6f9e87a6b1b73bae4c10137379447d9fecf268073015ac10a3091b8f6b0088d494bff18fcb5df27e3417441a63c63bfa3b87dacd62e5a4d31f34cfd WHIRLPOOL e363cb8e666b83b1023e954fd40c4e6d980c6b391a9159cd60d1b4bf775f8376e198e53c3c59a25a820c2f0de9fa94b2245f31d7a77f224362754865a22fe2d2
|
||||
AUX stubs-32.h 537 SHA256 4c903162da80cefd394404cb8cd9963a6ef6e3ad6c7adcbaa450a002d929bfc5 SHA512 55308dbedaa91909a2213940f7a7b574cabe6b5a3104761a2a6f28d6aed00164544488c00cbf9d66a9a370a14c6b6d3a00434efd3ff0228cc8e4d81af19c0e68 WHIRLPOOL 9c006e266bea6bb9d623e76011a4eac07c5fe4fdf76a041cc42a2289a7e9163988bad0fb2f458e300e45aabf9fb864ec764a496d7f89d58e57a506bac206a5f1
|
||||
AUX xen-4-CVE-2012-6075-XSA-41.patch 1393 SHA256 6aa21c02e94cb9b4f612c7a9d1a8f980967692b1f20346da9670abb1d7ec688c SHA512 547f63e7eaf0a6db1a9de267cc6f9aa0f28e2221f2c69ca463ada85edbc07ac84c276dcd3ee017ab8846d4e4129e182fb76be35b91ae9a0e0afecdc091e0c305 WHIRLPOOL 848359780edc15895a09bf76afeaa503f907ac98a856b52d64ef4dcb137e2319222a47cd7a2866e6f25731498f487cfca2a462fb6dfcda8404026d8acfff5bcc
|
||||
AUX xen-4-CVE-2013-0215-XSA-38.patch 2515 SHA256 7d7a5746bc76da747bf61eb87b3303a8f3abb0d96561f35a706c671317ebe4eb SHA512 2abe25c83a3ede047db380b0477ba1aaaf9d955e87244f8d2404699e011cac46ad5501a0f75b76b90b5dc276d19ae08600a2fe57a69681f97088b5d17d977066 WHIRLPOOL 5176ba1c9f3019c50c087c56185c393ae99c0504f10abf08d896998f80d9f0a05c8c103b4276c3370c72171fab2fdc07ba9c68261ac02c6a859ed7a74b6bd056
|
||||
AUX xen-4-CVE-2013-1919-XSA-46.patch 9844 SHA256 822da2303f1fc69648d7a29eb72fdda8e64baab3edc0e1548456d31e66ed1d7c SHA512 35ed4d580d219e977ee1085c223563f51ccd9ce3675df2660d10d99c366a2fe2446269c98ac9dbf57c37de83340f4b0868d0eb3c5d898be4c0fc80357f6ed780 WHIRLPOOL 36015584e3f72c3eea62cd0658230805645983be571768f068baa605b274d16cca9fc4dcb27152016dde81f6a1dbcd91430654af5c2c1b5211ed5c2441b65c1c
|
||||
AUX xen-4-CVE-2013-1922-XSA-48.patch 3846 SHA256 dc23077028584e71a08dd0dc9e81552c76744a5ce9d39df5958a95ae9cf3107b SHA512 31dd8c62d41cc0a01a79d9b24a5b793f5e2058230808d9c5364c6ff3477ab02f3258f1bbd761d97dc1b97ee120b41524b999eaac77f33b606496fc324b5fa2e4 WHIRLPOOL 6913705b070daeac8925a44585f94f78ec43cf1d7a8feeba6839499b0340a727f3c39848627bcd58217b589a932fbfce13628bdca2b815e2ddf58b9c69c11721
|
||||
AUX xen-4-CVE-2013-1952-XSA-49.patch 1877 SHA256 37055cbc74111cbc507af3f09d6ac2e472f24efd54cd3e08583dc635e66a539f SHA512 1e3ef057744076b9fca22c1982f33d38be06ab8e5d57e40e3160fc2850b69711a1765e4a2b037f7bc1fdb8a9f93f1649d86ea3da972ec4af147b7b80191069f8 WHIRLPOOL 43e78ad3ba597e7084b6194507839b8cc4c21f45c8fd70f00cb061a4ad22ec9ec690bf35ffffc7e02c616de5f35b329c6c4e3a9cf5ddaf23cdf0525681f70639
|
||||
AUX xen-4-CVE-2013-1952-XSA_49.patch 1597 SHA256 f7daee05c81bfa4effa821e22c8b0861c254b3a1d4e14b7da5709a6102997b87 SHA512 f4d49b90b08b5ac52a5e41f0b555db20e846016f0020e67ea243eed24f621b4b356c3c9e7c181e97fa2d428024a941b7b52eb5bfd933a850aafc4a7b51bb3295 WHIRLPOOL e0fb3d0d9463276dc6331547ef13d4117d7c3bb1503f9e60885553056a3452cba4937500834dedc79fde29198420bf0c7e5c7e9e596c8d27202559dd00c94bb7
|
||||
AUX xen-4-CVE-2013-2072-XSA-56.patch 1748 SHA256 a691c5f5332a42c0d38ddb4dc037eb902f01ba31033b64c47d02909a8de0257d SHA512 26a1c2cc92ddd4c1ab6712b0e41a0135d0e76a7fe3a14b651fb0235e352e5a24077414371acccb93058b7ce4d882b667386811170ba74570c53165837bcd983d WHIRLPOOL 8c3a7b373564f808074f7876d1b25c9ae8960c0f5d9d0eb5b188e845499273bf878998f0a5ca056fb6920e1c15ebfc6f77e996b915e1c483059b5878ee5a7b2b
|
||||
AUX xen-4-CVE-XSA-86.patch 6112 SHA256 0f715b7cecf3c5d786cd9ac8ac8e7b864aa7b332a478f4d94f6296f6b7ae0689 SHA512 79c3b2d77c5e3ca26f5c1368450575854b08f0928226b4313549fd9b67db733fcce09b522f23741199a83b8f20d89e7762b967cff5e2ddbdffe5e8f41d04e7ea WHIRLPOOL 6ae630b50f83dbd11bc717dd3ea02119108987e93d4ce331ad34b850903a8deff975ac16b1f25941dd280254cdfd147f7e5e2a6fa3e4cd15b9a91546aa228d85
|
||||
AUX xen-4-fix_dotconfig-gcc.patch 9551 SHA256 93c8726fc3e0bd3f54d4162a3fdace45e3c3ea24fecf5f54270c6dc55c3924ab SHA512 64bfc2dd60bf5a7db593250f9da62cdea4daa458aa8c474ec47b065f6e19509555f48d49ec8624c484d873fe947b6f9cab98cdcd2c24ca8795eb1b64b378a004 WHIRLPOOL 341506ced55ae2ad30af1696434df25ba77c665042aa82dda35d0722f0cccbe567c8cebf51c2e20e0df3084f74f7eb7a69808dea2801f911b2d3c46a293b6ba2
|
||||
AUX xen-4-ulong.patch 463 SHA256 160af74e6149a7c8066fa3f0b59c7dc36d0185adc98a3897de0ea26868778c1e SHA512 5188b1712009168c994ad72f9d0b0e9cd708a79244d2fbdd675b2fedb5f62b5b2f6c9f1bdd2101e2b66f1c08ab94f55230f4f269907671d82b00f510d059f2f2 WHIRLPOOL 86c98b5d698535893cd05f05481486a8a96f8ee96ce2add4e14de1d6a18701810d6a2c5925fa6cb367e95ef605c8bf9ebecb7dff7cf01763da4235a9c79c5b3f
|
||||
AUX xen-4.2-CVE-2013-1-XSA-55.patch 12309 SHA256 03589da73c958503cc9d3a7403b07ee165cda2a61b696a12e432f071d33c8b8d SHA512 1f1e11233ae2503061f66e23bb8e438ceeb55504f9ce140a4093d7b826e42956baa477e2a02bb660e33874ea6fc671dce89094c6c8959aedf9137ff8e2efc9bd WHIRLPOOL 48fd1c4702ce347bbbc2b5a9cfc1d8198a995cc95182005625df71b4cab1b1dacc38a07d5751d17b411e76acba49ff5669c1fe9afbe208634c25a90a8eae4649
|
||||
AUX xen-4.2-CVE-2013-12to13-XSA-55.patch 12653 SHA256 0f150534386d4a54e9b8110988f2511b7f045b526e39985dc5dc904b0814b6c6 SHA512 d1c4ef396d90079c2bb4e12e2bfca1be55a12fe9d1f6388d159a996b2cd10d965c96fb84906f87e31fec6831cfd1ce38cb8964fe9b9bde3c19d37e5b88723551 WHIRLPOOL 884215d7cfd8ed1a4254d3dc41725782966f6a32929a5d74610fe350421a07b8e9d34d4b049e8f472d5d5052de8682a8837368be5007bc09e248790576cf4a3e
|
||||
AUX xen-4.2-CVE-2013-14-XSA-55.patch 10103 SHA256 d9df769e1b6847a84cd85e3909acee85ce71fd3bc84945890d586388bc69cb11 SHA512 fcd09ca508e78a97169daf38ee455df6646c954bce7042259c7528b3cd2e6d24416d293b7c3b7fd4707caa29ee8d3916f07af5295341a043b350293a3dfe826f WHIRLPOOL 7d7599ca36bba2cbc9ea899dab98a231d4bdb60363aa5f5da36c00269bdb67f091e84c823c2c80cef985bfebbc8c1a3a207148c2b296084cf30d5252dee68eaf
|
||||
AUX xen-4.2-CVE-2013-16-XSA-55.patch 17193 SHA256 345068acdcf4f974d78d2f579c90c6d74ac3b6ed190eae0f182e5f12ac2c48fb SHA512 f650fb7c2a874c6f748a99d228d12931cbd77b45691dbc419d1f319c37534f58bf17aa4d47792931d368b8536e98790cb54fbafe356089964fa22c6366882ad4 WHIRLPOOL 5087bb9940b70a2d8283cbad2f782bf0e0c596f6a6b2a4173a9b2410bf512d063d8f3c2639c402ae61a411006167ecbc293303d00dcb68f5fe61d584b78ff0e7
|
||||
AUX xen-4.2-CVE-2013-17-XSA-55.patch 18342 SHA256 46665bce2e48a945ac25960f5f9459e9b9b5ffdc6284c0e8622d3fa01636c3a0 SHA512 f8923756911b18996be1a4ce9d8536291b3c7fd97362b840f784854fbe68753a9044da7e1db499f2b7cb85d0bd5e067a2e3ad763b2dad1b5c3dd8d94bd0f9c87 WHIRLPOOL 94001c689fac74225abad6162b3b16f7107e1de33e46090cb17ca5e8a61472236f9cf058737802d21d4fe42546c6c5d72b3cbf3961126abfb51aeff568c2b57d
|
||||
AUX xen-4.2-CVE-2013-18to19-XSA-55.patch 17592 SHA256 13686af23eba9aa4b60416376b34092c5d69bb2c9e0100063c828398fe144758 SHA512 dcf867589d1b427c97f4367155f61cb30c8cc449bb04ae216b0a432b794ad0f9743f35a96f3c3c4be69710031097261b5fb26110de0c285f4e089592cade3403 WHIRLPOOL c6cad0db64d51dfd1e700272731984a2ba06c5defe9b0df482c5d0858d0e5e8db87295b02742f6b9dffa29c573b59d34120806702b84f045ca92c1d9b6618c66
|
||||
AUX xen-4.2-CVE-2013-2-XSA-55.patch 2074 SHA256 b7673609a18525f238d411f9b150c90ecf48248542cc95ca969c9a85995768f8 SHA512 d19d0135057a313f458feeb5ce149b31133e5c43dc133e24d2058ade5838e33637bd07cfa82e9fecd98a28dbf85a598c1a70f20c7998d7fae3d5509026e1f6e2 WHIRLPOOL 3eb934e836f84d49bce89b3b79fe19a70734b8590857c1c74954f0c619834546222229912aa9143d9e10c9e912575d3440e53dd8ce19493915e7e347a5c87adc
|
||||
AUX xen-4.2-CVE-2013-20to23-XSA-55.patch 12908 SHA256 7422a1ae6d9aea2c0f7df0c459ac48f2a0ea5e1b4daaad0fd74a575ee0a5d73c SHA512 d03a0617d9e74e29b9dacc1a86268f164bb14b490c599166bc37b4524240a0d61d9e312cbe50a9eac1c6d98f050638bfb684cb13df1158478f09100948e5f9aa WHIRLPOOL 3142b686bf1279fb17c3a58c43f5b5a11814fbd3d455d7ebee0fe8f949668eed1bcd88ec5e6cbc71963ce99c830af4e21898cf2d4b7252c64d57b89e8ccc2bf4
|
||||
AUX xen-4.2-CVE-2013-3-XSA-55.patch 6149 SHA256 f5b809eceb7d342bac01f6a204eca7c89e1c62287040d2588b093b9cd0b5be22 SHA512 6f1ae849160076202d7dfacf2b8b880effeec19112ef18bb40ceaeac6649f9cd235e26eaaf78ffc83907f5098926818633b1344a3626454ad95dd97a1894ccf4 WHIRLPOOL 88f142e62caddffc611917e79dbbbda9870a779514fbee86c42888d53a2e94ad23fb25c626630410ef9cbb704fd5a3358d1a9bc98e2f9ef82298c2b00ba2bf95
|
||||
AUX xen-4.2-CVE-2013-4-XSA-55.patch 2139 SHA256 51b5f8a996f0d84c715235b1497e0816a6b31fbeea593b7c14925d11856e48b1 SHA512 41034da15f7ffdb6efee41dcc763276b1fcdf160edda88a15b0e0c39bc175a592825e9faa78b209a54f01dcb0e5198b6b40a924f49aed1334fdca54739f35e56 WHIRLPOOL 4da524a196fc713f75f57aacc178ad1b0e2e5ab6b00b941620f682a8894fca79a212155bc3e8200b870d3df959ef68f18cdd116ce64f1d3c93007159bdac4201
|
||||
AUX xen-4.2-CVE-2013-5to7-XSA-55.patch 6392 SHA256 2861fc68d7b9c49784deb43eeb7196e53316f5439d129d686b7b2157543f9c0a SHA512 1f69e1d9c56244bb8a97b0f9a426007e5779a7e88f2add879a289eda923723e3b4bddcc034797a4e79646780bca1b445fbbc857c9155e72d2177739525d5d88b WHIRLPOOL 4bd68553974eab849315ffff90ef7e0d7811923763ab3c0f111d60f15d574e65652aa5c60708bf60410f5caa0914a2d43dfb4242d7451fb76576a4d2b79fe1a8
|
||||
AUX xen-4.2-CVE-2013-6-XSA-55.patch 10103 SHA256 d9df769e1b6847a84cd85e3909acee85ce71fd3bc84945890d586388bc69cb11 SHA512 fcd09ca508e78a97169daf38ee455df6646c954bce7042259c7528b3cd2e6d24416d293b7c3b7fd4707caa29ee8d3916f07af5295341a043b350293a3dfe826f WHIRLPOOL 7d7599ca36bba2cbc9ea899dab98a231d4bdb60363aa5f5da36c00269bdb67f091e84c823c2c80cef985bfebbc8c1a3a207148c2b296084cf30d5252dee68eaf
|
||||
AUX xen-4.2-CVE-2013-7-XSA-55.patch 15024 SHA256 4bca58ac49bd56f6defefbfa76cfd0e6d45aabb1641fa9e9f983edbc784a9d89 SHA512 0622b2cbb0dc6f7b6a86a0ed41229fa2574d655b2d7c7727e3c0c4416155e26dbd933af8812f0e3b13f196da4d9de1064dc620751ddd4f66b587ecd6f30902f5 WHIRLPOOL 9ffda09ae380b2417d3599a9fbf894becef9f9bf88277cf8b4195f86e271bb6452aedb33050ddac1c25c7fdf71bb754a361633526a90d61d5489d5dae064c4e4
|
||||
AUX xen-4.2-CVE-2013-9to10-XSA-55.patch 11035 SHA256 c73c57ff530c15efa62ee4853d8213f0bac9c31280485f7b54e8b96721fadd92 SHA512 2991e7bf598ac2af57a96204a8babb4c15e5eb7c35c2477e4171b6c600ddc98906fe6dcda02fd5c155d196135b6c28631422bde5302db173ebdfc821089b8de1 WHIRLPOOL dbe8fa7421a68c13159b18b3bf898088c02d9b49d587a2f70a733d6a509fea13246b28b73136510b019d2b28fb23c45fb59e8711d189c0538a758639aaa62dd3
|
||||
AUX xen-4.2-CVE-XSA-57.patch 15550 SHA256 b698fb6230af3bf134e90f1611735ec2c4378df25a0ce2643171fbb75fbab489 SHA512 d2216dabd6265540d7a90002c739817a834c34b53a2c180796f264fb6a845bc3e2a8dd02dd7de9317475ff1659f35061c3e7eb51c4ced673a4b5638dba711484 WHIRLPOOL 59bdca24ab5eeb65c8f25c111edfc8b4ca7f62429502eff99e1612113d4dd8077fc38b13993df296bdb5a75831cc4725c25ab0d8b8843a3e3659f1e245cbcbd6
|
||||
AUX xen-4.2-configsxp.patch 1216 SHA256 2ac6642cc1db65bb087e8179bb81f3a88230c81042ca951f487faf294def1f39 SHA512 50af6a970be4cbeb7f7c2e721a6f5bea13e73dabe3141131844970838ffc5e04bb65e3c7a98f602a3bbb8326dfb8e3f058adfcffe4e267a07cf081786f5bbc50 WHIRLPOOL ddb0c8ad6ee0653d9b30c86561eee9d6c66675023c0fe2fa7911f9639d5c7b21a1c0fc400978cc23ad075f38c28d97bdd64b3ed4e2ce56740415f8d30d7607ab
|
||||
AUX xen-4.2.0-anti-download.patch 1028 SHA256 95ff7390d25eddf56af1d98b1310d2ebf97eebcad5c298c8320eb6ce9afd596e SHA512 8d84c3386764e2dd38bd0e93163c016b38d9e634cc4c9078138e593a887f3a9d2cecf391008004ae934a49b24af2a18051aab22b2a83b48fdad60ea50fc6120d WHIRLPOOL d95955f7236c1a4d9e23e5e4be1a8f8e9148511fc16b4fe0bba3854c02e24789c808739654684140d9900f22172b635c9af5bb6910f594b115b1eca4a7c907bc
|
||||
AUX xen-4.2.0-jserver.patch 900 SHA256 a8f9c0517b7fa4d56f3125515d260e60c51ef2cfe3fc22223c54415a92ffa16e SHA512 7f9bb7189273ecc34b5c66aea8cc9567a15c3d7e0fbd44e0f49669b067d719c9d85d6758cc213145679cbb8c2224cb5704aabb3ed40925bb2529965a5238d411 WHIRLPOOL ed6bcf1135c7dcb58eb2219c02b002fb57b16f50bfb0161bc64319b78dd7f8b87bc6206952755af900245d13073408946e31a51f01e95517f7def072f4810e66
|
||||
|
@ -39,10 +18,6 @@ AUX xen-4.3-fix_dotconfig-gcc.patch 19143 SHA256 53464dbb766f4437826c084e74aa84e
|
|||
AUX xen-4.3-jserver.patch 1487 SHA256 3bbf6d06ad1960e30dc84a3e3b179d5d23331ecf60d347871b7008c58456a6ed SHA512 f92bced9f3e7fec84b1bfce6ce3366f134cec2b892ffc3afcdd3fd3f73daf158c17c312260fae39bc9e04c1dab1045d17f0da706dd0dba0279e66dea454aed8d WHIRLPOOL 10828eb65effad714a61a18bcd6c33c2b7fb7fd0007b1a68aed7a653cd7e67acc04cc5eb9574d7d50c92fc7ca8223dff0c73f1cfde994e4ee1d787f536588b99
|
||||
AUX xen-consoles.logrotate 63 SHA256 0da87a4b9094f934e3de937e8ef8d3afc752e76793aa3d730182d0241e118b19 SHA512 ab2105c75cfe01768aecd5bcbb56269d63666e8a44e42b6a83aee87df6c84ee2f9ab249171c21b2e09f8fec2cae8318f6e87d160989398a3e7dd68db8d52c426 WHIRLPOOL be108bf298202851de434af513ac8c03a533e7621623c2a7e8f26d498074b3eec81b85b2ae29ad2ec67f4fe9937c88bd78c5f5e260793e7e69ec964d4adb989e
|
||||
AUX xen-tools-3.4.0-network-bridge-broadcast.patch 496 SHA256 d00a1954447fc29500ab2f1a8c7900310e0dee81942be5c922ad66b6b42dfb74 SHA512 496c61ec237506c77577e832828de923283f55ab07ad141718af1a719b1b5bcdb8152a8cffddc679ff4a3e389582e7b8de8aaf1b4c8b1124bf1563467bdf674f WHIRLPOOL f80a557ed62cc26a51f85bc8682a738ab29d4573e3261c440f6e66f50cd81263fa2c6898b1aa1b1c227a2d3923cc9fd718ffad2e123ee69c6d7929def7906433
|
||||
AUX xen-tools-4-CVE-2013-4369-XSA-68.patch 1923 SHA256 64716cb49696298e0bbd9556fe9d6f559a4e2785081e28d50607317b6e27ba32 SHA512 bd1deab154e129fc63dcc51ce5c4d004f5fe044443755a0b8943d8b6087f2ef7cbfd76f2390d36f7b4ad1797ef28abbb23157401468e1bf33ecc7a17aff9e8a4 WHIRLPOOL fe4094b44455aa265780a20dd6c27eff782161908adb235769411e978fe5c8e1e8c6d24487be6b1dcab45e6eb3830d23ec3eacf1f9e5ab99f491c83617ff535b
|
||||
AUX xen-tools-4-CVE-2013-4370-XSA-69.patch 995 SHA256 d3beb662aacf628b6a25ff6cfcd9526ab689aa43a56cf25e792a001f89b4edbc SHA512 606bb9e8fbc16893a927cfa1bb45a61cfb0588eead7dd7440301e10275a23590e98af72bb4c01f7772469b4760daeac71a9a3899c55b96f0b88ad4355621ea32 WHIRLPOOL 9f63f44187e1b77d1ace968ee98f46017539b4675e5e164bde97e5e614790eede4754fdd33d57d9e48f8b4cc1607992fa85ae5ccf27b06fa34a4fd5d537f0732
|
||||
AUX xen-tools-4-CVE-2013-4371-XSA-70.patch 1050 SHA256 2582d3d545903af475436145f7e459414ad9d9c61d5720992eeeec42de8dde56 SHA512 107335f8e4ffddb9cab9e21dfdf745dea0e4d078c71ee59671942291c189dd0e998a9d480fa91ae439e6410591c9fb06491ca8e810006e22640bf0dc9cf5da81 WHIRLPOOL d7c6908432225ccf13093a378ef3cee09facd2c87cec56251f05e91d7a38dc1878c6be5d7148b7f704a2df94cc60e8b286efb403e58fb50a582076363d18f2b7
|
||||
AUX xen-tools-4-CVE-2013-4416-XSA-72.patch 2633 SHA256 66e11513fc512173140f3ca12568f8ef79415e9a7884254a700991b3f1afd125 SHA512 5b97f1d97f3f3109d63cca37ef4922e69031bee42df620aa5aec9ef91d9499b4310aa1dfac49974ed528fdac9885521026a839f66e69d392e4cfc23fa6b4ece5 WHIRLPOOL 988268db13b5ab72bcf1dc60aeb843cb2b33c638c346f84cae792d734c0b987f9ee26b3ecf1db3449750b355a33d68d508722ffafd38c3f967855ff39369c39d
|
||||
AUX xen-tools-4-CVE-2014-1950-XSA-88.patch 851 SHA256 7a73ca9db19a9ffe6e8cd259fa71dc1299738f26fa024303f4ab38931db75f14 SHA512 16cb312d5f8f3e83850900ed4c557d9f47e03670ffa8b148a4ac3ca792e309d86706f05119244c9e29b37e366a11d7dbcd4b5f1b47936c9a7b65094fabb4965b WHIRLPOOL a3c21b03a00c3d61bb9d1c843a371f14bb9d3b13aa18bdbc59020bdcf542aadbd027f4357b0b3298f32a4e3e0928ad5b6ccbd4e7462238a91ea8708eaad28fe3
|
||||
AUX xen-tools-4-docfix.patch 438 SHA256 016120c2333667aa84861ac9289c48a072c4842fb517936570882e1fc4060de6 SHA512 0a67d703749df823f5223b555c6dc896420e73ed7eeb5e77a8f8b950fc8bafaf9e20d66c35b29883b3cee6f8ca5054af3b55f804d20ae20d676feeeabf92b489 WHIRLPOOL fed73bd521b4cbea804ef4bc3b4b3a4007e7765cf0ab67e700e95afd328181ab5fce246b53a5e2a462baf6029664b25f82ffeabc1aaeb45fa99af344ecc957a5
|
||||
AUX xen-tools-4-qemu-xen-doc.patch 820 SHA256 691b2d84f7312388d528c83f3e9e90521e6b2c97abae8ca8a83325655264c98a SHA512 bc07420be7629796e49e128c1cfbde8fa7d4dc3b66174462448e9033f78c0c982dfdbd4dde9b1c54a9862fd2f9602c6bac0be1dfc0df8280aaaf8de60acb708f WHIRLPOOL 4fc2907a42bc3f824160f92586392f7dba07c2229382585f5f7bf4c0f3ab2574a814e8e8fd076b68abb2580497492e1fc0e6181ffb8f1acb5c70e60caff81505
|
||||
|
@ -66,40 +41,24 @@ AUX xenqemudev.confd 156 SHA256 61c5ff72464c5098d9cad50e5dc94a090dd107b4831bb60a
|
|||
AUX xenqemudev.initd 1847 SHA256 c1b002a54917f60adf6941fecf44453c0072a9048c9c3e318d2e695f7ea12c72 SHA512 3fb6a8c5d35b773e0fb7bc9b6c26aa18be48b97d95cbb21df8aefeebb814e3fd5819d579504a4015acb0e5fd6abe2f864f48ea83c095cedae2c69720b6e355ad WHIRLPOOL 2a286111d18eb1f8701f3d30e1fb0b006e2ab359db1ff32100e18fd0e4f46cf13407d765842542c38a31598f62cc71f246bb5c11d06410336850c0288c9e8d4a
|
||||
AUX xenstored.confd 42 SHA256 afcc14f014fe4ec478f85d230efefba9ffad024bf8c83b30074e8a3712cc7831 SHA512 0906cbcdc84935d07cf53bc4447a1f9a9dc4e4fb9fda9a7163f6982f1d8a3ada1f0650fcd254fb6f715a54f7971daf0a5e61c3de6db70dfd156156fd55b59fe4 WHIRLPOOL df46f3fde8b13c3427f445bcf08eb4c660f6000164a01e461cff85cf93ce1195009fc3b4457181788da8eef8dec9125b41ace233ec6f169919be64337a57ebb8
|
||||
AUX xenstored.initd 935 SHA256 d5d731beebe4e24150fab9d79e6a3c48889290324c28180977b97d8d4c5e36f2 SHA512 1fe1df637bb6f01a67ea1aecd2f3648cdd1575187e41cd7ac0f7d6be30d817d37222de914ee97dbe1ac19ea2f772e1db6c09b5e1cb9f5a8f2cfcdec0c912d975 WHIRLPOOL 750a984ef6d2690aa47bd22e2b5fe8617c4bbff0e79a5e4c1d26f7456d07039a9389ca3b70dfd7bfb65f009d8eb738c74052642c775ffd51213bfb5629162746
|
||||
DIST XSA-55patches.tar.gz 23888 SHA256 e86749d02ca5594ebcfdaea820a6cf1fe11015c7fdcc5836260498fae317d75b SHA512 ed1f321a1351df99cfb05e1dfc62dda1268544b0c0ceb7a01438805046e027fb9d59194d179b7a8c302b091a7bf444811b0b9359c4d42f7e902510515c275b6b WHIRLPOOL 5a611e5260f0fc97471f386da3499f7714e015c5c2556bd7199466558d8e375784d32655bdbe9ed4cbf492fa3b41091677d9fe6d3714b029c9a2b1dda6102edb
|
||||
DIST ipxe.tar.gz 2867999 SHA256 632ce8c193ccacc3012bd354bdb733a4be126f7c098e111930aa41dad537405c SHA512 c5cb1cdff40d2d71fd3e692a9d0efadf2aa17290daf5195391a1c81ddd9dfc913a8e44d5be2b12be85b2a5565ea31631c99c7053564f2fb2225c80ea0bb0e4a4 WHIRLPOOL 58b7459aaf7323968e2f4d1cdcb563a04a0ee40d7d0e8fc600495baf6914127fbbbcddfb66199cd9f462eb59565b3d1ae90a05b3c771b8f13c2d2dcb6070eebc
|
||||
DIST seabios-0-20121121.tar.bz2 2199282 SHA256 f7f67181c6c0b4cea3a9db48e2569fdcbbc81b732a2f672079c42fb44153ee62 SHA512 4f886088ebaa911590b8cb19db5c5dbc8f1384d2d5a7c4bf04df083e177513b3123b1839dad744171670eded8b69ce092a774288aec1804d00aa32b1b6778599 WHIRLPOOL f2e62682d7213ee5eaecbc2590637ef36d9c86f746840c0ee758c0c153139f485032ea2cd098c87bb8a2b5f17f91375b8fb65599e3b71b45b1645df85a88887f
|
||||
DIST seabios-dir-remote-20130720.tar.gz 3201017 SHA256 0cf06b54e8ae1cfc25f2942eea1490a9e7e01f478541577025f6eef76e0c76de SHA512 e9ebe3711e3f678d3632f8e8e645f8be4fb65608aff04aeeb0e1152521bf571bc4d879f136d23bb0aa8bd4c4ec20f294b472cf54dc70916e52d330328aadd357 WHIRLPOOL 6138271f72fd96fabe3cffc07a6efcb9c0e195ed96f4ad708d00e85e0a84a03900dc41389cd4f26d533a3aa42142a9e17708d7b87d722f1c9348f61a5db3e59d
|
||||
DIST xen-4.2.2.tar.gz 15602746 SHA256 c9bfe91a5e72f8545acebad9889d64368020359bfe18044c0e683133e55ae005 SHA512 4943b18016ed8c2b194a3b55e6655b3b734b39ffb8cb7ee0a0580f2f4460a1d0e92e1de8ac23f5186272914fad1650586af51fd7c3644d0310eb16f2e11c5e80 WHIRLPOOL 519eb87cb2da694696cbc3e72070a0a3bdb07c46fa266d855d8379eec3a92adfa4d434af3ac01c37834ce4a9174081a6c40030b185a70902329b185cb8d0bbea
|
||||
DIST xen-4.2.3-upstream-patches-0.tar.xz 84436 SHA256 7c2477b9b29c9d84bb26ed60bfc2700f2a614ed8040b93906e801831f3498b41 SHA512 a4e8b53a0efb9d64d4dc65ee3107422c8007537e03f9c8e6f1b2c838cf62e6819d447c1ed44aacb5c4e9979f0dad7ed313d2db61df6e6ad2d7708a81964a7e12 WHIRLPOOL cc3c2224bba3b2e5f057ec95f9e85e58b17bc0dce338da429c7970877967cddf69228258ff491be9c1d022169a90fcde34ef1bcb0c198c9123ca219707a5a99f
|
||||
DIST xen-4.2.3.tar.gz 15613235 SHA256 69b6a73701383d609ad094a38925004e8595755fb39a6fafd579ba754e8667db SHA512 01521c8724354f92a2555683a8b103e5e16aedeb2c6166cc3ce40a0cc6cd9e07a601aa24930bb7391e00eb97f04003e6523dead09382cf86eb56f5b886509b9a WHIRLPOOL e7f7848ad632e5e77db95b2eb37c82f31a73021af4b6bb44091cc14103faa193bc2d6deb089e2a196daab5a08dbc08f135a8937a25a4ff5d31fe37c789bae1e9
|
||||
DIST xen-4.2.4.tar.gz 15663999 SHA256 e23e6292affd7a6d82da99527e8bf3964e57eb7322144c67c2025692b1a21550 SHA512 3e5263511e7c40899f580f3384bd987f9c875b8e6816202fd1a5a64fe7e336803d09e58148af074938ef261f0ceeafad121ac541ddd2bf66b76c5aa4ad07c357 WHIRLPOOL 25d23f5d921139ba0f853fcd76ae998647d32292bccfd4e7c4f3b12f860a38fbb33ebda67c839657bf3a25d837c9c02b80d663362263d16d42284ffde09f0bc2
|
||||
DIST xen-4.3.1.tar.gz 16429423 SHA256 3b5b7cc508b1739753585b5c25635471cdcef680e8770a78bf6ef9333d26a9fd SHA512 f5250ad5ad3defc5dc1207eb6208a3928128ef57ac4162018bd92b750dc1df1eaaf37835528aca33a0f9e04c82d5f8c4ba79c03a1780d2b72cbb90cc26f77275 WHIRLPOOL 087390786cea9aee273a5d81988436303991aa5ea92faf111d3b619517368f8c8feef84f4f8c602cac723980a344eb90414887db4ca88a2ee14bc6b0253e36ca
|
||||
DIST xen-4.3.2.tar.gz 16472188 SHA256 17611d95f955302560ff72d97c08933b4e62bc2e8ffb71400fc54e388746ff69 SHA512 ec94d849b56ec590b89022075ce43768d8ef44b7be9580ce032509b44c085f0f66495845607a18cd3dea6b89c69bc2a18012705556f59288cd8653c3e5eca302 WHIRLPOOL 72250369fb2c90ba608e1da018cb6417b3089642c8ba59af9f2825ec5ba7c4e6c5d6f86140b20825817e4625727c6d58c5d38b00863c994e31c8a04927997bd3
|
||||
EBUILD xen-tools-4.2.2-r3.ebuild 11697 SHA256 9407f8c81db48b9c41845cbf60635675b5f0c7917cff073d6b43bf2f9dfc0a41 SHA512 77b16ea53ba72363d77c64722b18705c80c51d0fe4fa63018b2611d9da049186c6914047e3e8683e48bcb53d2a77a05e00f3f3d7bf5a70b5900b3395a04e1382 WHIRLPOOL 046f0e38775b7af9293f713e30aa17725601f0ac5c75b59d0b86262bbab5b89ffb95f808a20be7fe40be419f58e48787857dfffc0ba23dfdbfb650ec7a19a070
|
||||
EBUILD xen-tools-4.2.2-r7.ebuild 13105 SHA256 b51215ca584b784a5079f632b5c954769440d3d730caf37233032df42a9a7c25 SHA512 7a845a85fa740b01891aaccafadea30d9e1419493db88bfa53cbea79ffcbfe38a4b3394abab27f2c4c02413ebacfcb3f8b49505104f7221c51eabb7271efcffb WHIRLPOOL 4a425e42c1012f31a1d525e9475964afc17f686718f5d2bfb58dc40c9cac21f5d00a38ee0ad3c6020b2f945cb38c7a6d380822793b33aa80599e4be942cb792a
|
||||
EBUILD xen-tools-4.2.3-r1.ebuild 11981 SHA256 96fa80fc2008281cebb02341e504f21fb11350bba7ed94529cf4955324c8adb5 SHA512 b3942ef5835714db909ad1b5ef5d6fe388d18c40e4d2d15490655b6e16c2f76c78eea155f0263cfb2b59e073a6e09a6d33a4aae00e1fd5066122e6735f0610b4 WHIRLPOOL 50999cf061e11a2cda0dc4798d810ceee61a7b520f481f80070dd31c1757e8d8e810e957923979d193987292441fc5f5500991dd08ceaed7012ba6a2810d83e7
|
||||
EBUILD xen-tools-4.2.3.ebuild 12375 SHA256 bffeb11cc012d86446442c630df384b195f241d1c7ae6159e618419e09a325b5 SHA512 0f549303d456bcdfdfcbb2422ffb9d6619237f1170f734a071d87d99a28853e6d6542652a36ff3aeeecbace96dc04fb10531c342cb2025f18ea361288292542b WHIRLPOOL c8e83fd3862b5608c10e7cc363604c5de29c391954ee7ab8879aac3acb355e863cb8d894dbfff194ca71a191ba8c8c02fde4b0df44c1f4d95e89dde4c2c9fb11
|
||||
EBUILD xen-tools-4.2.4.ebuild 11980 SHA256 6f020eabe55fb999097c137e0e6e2923a7d9b451106476910e91233484e4fe3a SHA512 cd4bcaf7cbe9807950ffa7408d5330acf40536a15c3703ea7edc3625f615ee51b4795402f9f1d1c197cfa9cc31a50bfd201dd492c4158e76ea4bd054bc20d93b WHIRLPOOL c4282c7862c18f87f4fef5e9a13dcacf88a6c0838ccb21e9d1b87ac16f81fc2d08138de6dc53b9924f85ec15c8c3dd528bad2136b4dde7ae249a35e996bf31a2
|
||||
EBUILD xen-tools-4.2.3-r1.ebuild 11986 SHA256 dcdd44857cf2c6c78d63772322c5ccdd54e680eeeaea7fec1bf668270fdfa995 SHA512 088bead44a5e101c638542c211976ba4072864e62cf4c1dc64287af9209ded61de1dd0a8651047886f649abb1c288e0eac0743383671f5be6039c040fb59814a WHIRLPOOL d9a1cfdf14e4a0f5b434a72e0cee9a092178a352d5d650d8066576dd7407a774b10cf2d8c75e8abaaaf8ef89a90fa03650e311af46683fddf8ba141cb3c32739
|
||||
EBUILD xen-tools-4.2.4.ebuild 11984 SHA256 cbd34696846e9d3323080c52f2195b4ea5e599ba719e77eb98e33336fbef60b8 SHA512 ff42d94717716e0b699db2f01bd92f0f74fdb14420cd851e54f58307bc4ebbdc169915f339f6cd6c9e2effd7198de813c3b69eaca367f1ea3223ce871ae7eba0 WHIRLPOOL 2a996a780f9a9bf3e55f15417e74969f8d5a567645cea0c25786cc5d753a5443524a98d0d6aac97ac0956f657ada149e7b740fdd205966051d2d58396cdfe5d3
|
||||
EBUILD xen-tools-4.3.1-r5.ebuild 13355 SHA256 df19ea40b75d276dcbbcc358bd39bc2681e6a3b77ba829004e01adc34dcb1a9c SHA512 b5283d8f18f7b41ecd6155ae5cd2fcf31d5fc845eb297c7cc42722b5f4caf5ab184dbcfef2f85310a6ac78e0f535d85ca9e056462db14b7cfc910e173301b727 WHIRLPOOL 3c5580bd53ec61b40537645a1ce53081b4648b5abf1c8d885b2296c375b738085a48e4343cc2504a83a28cfe49ac9d0710d635fd116d3faee6d3cf2768738ff6
|
||||
EBUILD xen-tools-4.3.1-r6.ebuild 12999 SHA256 1f06e82fe941a8099bee6deaf44bb678c3eb9a1b22babbba9f11de3c6f665b2c SHA512 2ff51434796f04767273d621ebff1a5714734ab6a8449c9ebfd70b073796a349bdbbfa0260bf083b9f25580cfc3a6858956eb4af4568288d382af8023dc74b8d WHIRLPOOL 2a50029c8ce0993bd35d4f7f1761ab21293b666fa08ba1daa1d10fb463a473e8e9fb4df41020365bbc0a58cca3e879075c00b062537377e0d115029c1d7bbc94
|
||||
EBUILD xen-tools-4.3.2.ebuild 13238 SHA256 00c9c15ce76aa2bb3dab1df3cbc318f041ea702314cfc973eb936ca7286eb5a1 SHA512 0b3d9ab2dc54b21d5689b06eec4fd003a5595e7f3acd9e7bef657e9386f7e1bf7a9a8e6287bc312d5fd0f3928bf7e27ee6b6284558b5facb67dc51bb2c29ba2e WHIRLPOOL 7cff0adfd44f33d96ab44f656d8e568239969873ac4ee2238403949a186bc42fc451b948f657adabad1d6a5cdf42c3025214b5be66d442ed7e7b697aa9feea69
|
||||
MISC ChangeLog 52803 SHA256 7082aec89af088641c4ebe2ec71b360e01de895754bfa3b57741cf254bcfee67 SHA512 a6980c2573030209b95603587d45e39804e5a052f8cc1ed1ab007b2c85eaedf7da8f664313bbd1a9e6589e9d149e0e76597db373896898636d013c5464cb880c WHIRLPOOL 0c9800f7214a45e3d1ba04dd4e65aca25a3c5e7b5aa45906e6ffb6da955d9e2ff4d1841d1ccf0157d8daf14684ca2e4a5936daf4194e4a46c88812ee541c0cd4
|
||||
EBUILD xen-tools-4.3.2.ebuild 13242 SHA256 3e060a74d12eba31c9325a1adce942b8bac357500b32d87e480b3ebadb652b8c SHA512 6a8137b0ab7498bd76deeb352aa3f47a1d470cc8f46154653fdd4fc67086f1d56f189492131fbf15912848c3c9986350e29b12455bfd87bffde4d85481b3ea90 WHIRLPOOL c044740a9773112f8a55889766fba7b4fc8612cf78ce00db80a64ab4e2b6a6c005628c1a1a03b01a2ce0297c8c5d6dd2f0d666252d9af2dda7e07c5da3d3f22b
|
||||
MISC ChangeLog 54284 SHA256 af8fdf00d3fd4d62e7124888fc328c7707a4cc8832f1fc01d8653a2d322f6c98 SHA512 b3edc95f9b6b96038b85fde320492528476569d6a9a1b9b59089266f251f3af3ff104be3f3885e0de60bf5c248b17aae867eab214fb46b4f1bf20f1443ddcc1b WHIRLPOOL 49ba519e03f894e35d37b8ea4fadc18c80f3326e7fd8173ab955de85c0b1732cc59b9de74bc377204f91e1d62e06e5a93105523a7951a9868cf9a9526570e675
|
||||
MISC metadata.xml 810 SHA256 adf8036cf95a218b6ac09df641acc482e39557e3cfd16728e03af04810c92e36 SHA512 8fd59fc4b8110132df068d3658b8d48b9f10c36243b2ca340c5b178a58eea12bc7531c14b6a41478a0aa754a2b29ec1bf32827d5fca240ad1237c017e50f1de9 WHIRLPOOL 01e873b0cebe4a40f702e0977efc2b3f62984032e3ff81d3e45b3e291712e51c20510f41dd1402bd4d916a674204b02acc49fc6e6be53cbb0f4fc8430cbb53d8
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAEBCAAGBQJTBdfRAAoJELp701BxlEWfn9AP/Rru4LaCcTo6x8po7p2xRVtL
|
||||
2pVMlayUYA+d0+bLDM0KEN1EVBTuYZijl4/XavAeAgnTuCJCaI4ZToqyKt1dowZE
|
||||
9c/NKIsphDPobjys1JGGNHFoVcKkskPEy3txTciUfedfa2qPmA63+cIRno7tBoSU
|
||||
HBfFzQU/Pc4oE+AM65hcxUXjLfPkpa5tARkNqqSk5LoQkt32/SYVWFkC+QjV5pq1
|
||||
HvgAAMbmGQMcxXEYXMSz4WoPxriKPTNIxKDUJ0kG+h2EO4m3NggyzMdUF4EazB7k
|
||||
vdC0J1j81rAIOwCox0uyaW9xDtCLodOECWGD6TIisnJ9PHHvOVPGKRfEN9xU0bn9
|
||||
909Ew1rLjAhhHL0yiMFwAFHRexXQBxxNzfd8ZGtdfyYPStrdWeQr0uhq0RT0rnmS
|
||||
+YOai1XIYRNFNFGrtaHiK4oJuyMeR7GtPn+aQ3VK7M2l4T5W8QnEuiVJQ8XNsCgd
|
||||
3U8NvkvZSBsLfyV86bJ7TtiJ7CT+AmVx+nG5hx4QLRNhKVbTo5dlbKMI/4/M7Saw
|
||||
ELhiXZFOQY84Z0tYVh4Di8ReiOjwdEvjCYv0wh01y+zDKx9H1bYxMVwzeBFDS9OO
|
||||
pewH0o7AQYouy/Esu4vWlkVYHWV/bx4BJaxMPjZA/RBuL407Iv82AtBRt2zg9WB/
|
||||
uVFX8YZxfQMBTSFzaDS8
|
||||
=EJ+A
|
||||
iEYEAREIAAYFAlMG2UoACgkQso7CE7gHKw34OgCgv6ahZKjsTgTQZZSBZ28q+TNF
|
||||
cBIAoLHzgLTWm8h6wgGkJOgNedd/pg+3
|
||||
=2awT
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
|
@ -1,73 +0,0 @@
|
|||
diff --git a/tools/ocaml/libs/xb/partial.ml b/tools/ocaml/libs/xb/partial.ml
|
||||
index 3558889..d4d1c7b 100644
|
||||
--- a/tools/ocaml/libs/xb/partial.ml
|
||||
+++ b/tools/ocaml/libs/xb/partial.ml
|
||||
@@ -27,8 +27,15 @@ external header_size: unit -> int = "stub_header_size"
|
||||
external header_of_string_internal: string -> int * int * int * int
|
||||
= "stub_header_of_string"
|
||||
|
||||
+let xenstore_payload_max = 4096 (* xen/include/public/io/xs_wire.h *)
|
||||
+
|
||||
let of_string s =
|
||||
let tid, rid, opint, dlen = header_of_string_internal s in
|
||||
+ (* A packet which is bigger than xenstore_payload_max is illegal.
|
||||
+ This will leave the guest connection is a bad state and will
|
||||
+ be hard to recover from without restarting the connection
|
||||
+ (ie rebooting the guest) *)
|
||||
+ let dlen = min xenstore_payload_max dlen in
|
||||
{
|
||||
tid = tid;
|
||||
rid = rid;
|
||||
@@ -38,6 +45,7 @@ let of_string s =
|
||||
}
|
||||
|
||||
let append pkt s sz =
|
||||
+ if pkt.len > 4096 then failwith "Buffer.add: cannot grow buffer";
|
||||
Buffer.add_string pkt.buf (String.sub s 0 sz)
|
||||
|
||||
let to_complete pkt =
|
||||
diff --git a/tools/ocaml/libs/xb/xs_ring_stubs.c b/tools/ocaml/libs/xb/xs_ring_stubs.c
|
||||
index 00414c5..4888ac5 100644
|
||||
--- a/tools/ocaml/libs/xb/xs_ring_stubs.c
|
||||
+++ b/tools/ocaml/libs/xb/xs_ring_stubs.c
|
||||
@@ -39,21 +39,23 @@ static int xs_ring_read(struct mmap_interface *interface,
|
||||
char *buffer, int len)
|
||||
{
|
||||
struct xenstore_domain_interface *intf = interface->addr;
|
||||
- XENSTORE_RING_IDX cons, prod;
|
||||
+ XENSTORE_RING_IDX cons, prod; /* offsets only */
|
||||
int to_read;
|
||||
|
||||
- cons = intf->req_cons;
|
||||
- prod = intf->req_prod;
|
||||
+ cons = *(volatile uint32*)&intf->req_cons;
|
||||
+ prod = *(volatile uint32*)&intf->req_prod;
|
||||
xen_mb();
|
||||
+ cons = MASK_XENSTORE_IDX(cons);
|
||||
+ prod = MASK_XENSTORE_IDX(prod);
|
||||
if (prod == cons)
|
||||
return 0;
|
||||
- if (MASK_XENSTORE_IDX(prod) > MASK_XENSTORE_IDX(cons))
|
||||
+ if (prod > cons)
|
||||
to_read = prod - cons;
|
||||
else
|
||||
- to_read = XENSTORE_RING_SIZE - MASK_XENSTORE_IDX(cons);
|
||||
+ to_read = XENSTORE_RING_SIZE - cons;
|
||||
if (to_read < len)
|
||||
len = to_read;
|
||||
- memcpy(buffer, intf->req + MASK_XENSTORE_IDX(cons), len);
|
||||
+ memcpy(buffer, intf->req + cons, len);
|
||||
xen_mb();
|
||||
intf->req_cons += len;
|
||||
return len;
|
||||
@@ -66,8 +68,8 @@ static int xs_ring_write(struct mmap_interface *interface,
|
||||
XENSTORE_RING_IDX cons, prod;
|
||||
int can_write;
|
||||
|
||||
- cons = intf->rsp_cons;
|
||||
- prod = intf->rsp_prod;
|
||||
+ cons = *(volatile uint32*)&intf->rsp_cons;
|
||||
+ prod = *(volatile uint32*)&intf->rsp_prod;
|
||||
xen_mb();
|
||||
if ( (prod - cons) >= XENSTORE_RING_SIZE )
|
||||
return 0;
|
|
@ -1,293 +0,0 @@
|
|||
x86: fix various issues with handling guest IRQs
|
||||
|
||||
- properly revoke IRQ access in map_domain_pirq() error path
|
||||
- don't permit replacing an in use IRQ
|
||||
- don't accept inputs in the GSI range for MAP_PIRQ_TYPE_MSI
|
||||
- track IRQ access permission in host IRQ terms, not guest IRQ ones
|
||||
(and with that, also disallow Dom0 access to IRQ0)
|
||||
|
||||
This is CVE-2013-1919 / XSA-46.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
|
||||
|
||||
--- a/tools/libxl/libxl_create.c
|
||||
+++ b/tools/libxl/libxl_create.c
|
||||
@@ -968,14 +968,16 @@ static void domcreate_launch_dm(libxl__e
|
||||
}
|
||||
|
||||
for (i = 0; i < d_config->b_info.num_irqs; i++) {
|
||||
- uint32_t irq = d_config->b_info.irqs[i];
|
||||
+ int irq = d_config->b_info.irqs[i];
|
||||
|
||||
- LOG(DEBUG, "dom%d irq %"PRIx32, domid, irq);
|
||||
+ LOG(DEBUG, "dom%d irq %d", domid, irq);
|
||||
|
||||
- ret = xc_domain_irq_permission(CTX->xch, domid, irq, 1);
|
||||
+ ret = irq >= 0 ? xc_physdev_map_pirq(CTX->xch, domid, irq, &irq)
|
||||
+ : -EOVERFLOW;
|
||||
+ if (!ret)
|
||||
+ ret = xc_domain_irq_permission(CTX->xch, domid, irq, 1);
|
||||
if ( ret<0 ){
|
||||
- LOGE(ERROR,
|
||||
- "failed give dom%d access to irq %"PRId32, domid, irq);
|
||||
+ LOGE(ERROR, "failed give dom%d access to irq %d", domid, irq);
|
||||
ret = ERROR_FAIL;
|
||||
}
|
||||
}
|
||||
--- a/tools/python/xen/xend/server/irqif.py
|
||||
+++ b/tools/python/xen/xend/server/irqif.py
|
||||
@@ -73,6 +73,12 @@ class IRQController(DevController):
|
||||
|
||||
pirq = get_param('irq')
|
||||
|
||||
+ rc = xc.physdev_map_pirq(domid = self.getDomid(),
|
||||
+ index = pirq,
|
||||
+ pirq = pirq)
|
||||
+ if rc < 0:
|
||||
+ raise VmError('irq: Failed to map irq %x' % (pirq))
|
||||
+
|
||||
rc = xc.domain_irq_permission(domid = self.getDomid(),
|
||||
pirq = pirq,
|
||||
allow_access = True)
|
||||
@@ -81,12 +87,6 @@ class IRQController(DevController):
|
||||
#todo non-fatal
|
||||
raise VmError(
|
||||
'irq: Failed to configure irq: %d' % (pirq))
|
||||
- rc = xc.physdev_map_pirq(domid = self.getDomid(),
|
||||
- index = pirq,
|
||||
- pirq = pirq)
|
||||
- if rc < 0:
|
||||
- raise VmError(
|
||||
- 'irq: Failed to map irq %x' % (pirq))
|
||||
back = dict([(k, config[k]) for k in self.valid_cfg if k in config])
|
||||
return (self.allocateDeviceID(), back, {})
|
||||
|
||||
--- a/xen/arch/x86/domain_build.c
|
||||
+++ b/xen/arch/x86/domain_build.c
|
||||
@@ -1219,7 +1219,7 @@ int __init construct_dom0(
|
||||
/* DOM0 is permitted full I/O capabilities. */
|
||||
rc |= ioports_permit_access(dom0, 0, 0xFFFF);
|
||||
rc |= iomem_permit_access(dom0, 0UL, ~0UL);
|
||||
- rc |= irqs_permit_access(dom0, 0, d->nr_pirqs - 1);
|
||||
+ rc |= irqs_permit_access(dom0, 1, nr_irqs_gsi - 1);
|
||||
|
||||
/*
|
||||
* Modify I/O port access permissions.
|
||||
--- a/xen/arch/x86/domctl.c
|
||||
+++ b/xen/arch/x86/domctl.c
|
||||
@@ -772,9 +772,13 @@ long arch_do_domctl(
|
||||
goto bind_out;
|
||||
|
||||
ret = -EPERM;
|
||||
- if ( !IS_PRIV(current->domain) &&
|
||||
- !irq_access_permitted(current->domain, bind->machine_irq) )
|
||||
- goto bind_out;
|
||||
+ if ( !IS_PRIV(current->domain) )
|
||||
+ {
|
||||
+ int irq = domain_pirq_to_irq(d, bind->machine_irq);
|
||||
+
|
||||
+ if ( irq <= 0 || !irq_access_permitted(current->domain, irq) )
|
||||
+ goto bind_out;
|
||||
+ }
|
||||
|
||||
ret = -ESRCH;
|
||||
if ( iommu_enabled )
|
||||
@@ -803,9 +807,13 @@ long arch_do_domctl(
|
||||
bind = &(domctl->u.bind_pt_irq);
|
||||
|
||||
ret = -EPERM;
|
||||
- if ( !IS_PRIV(current->domain) &&
|
||||
- !irq_access_permitted(current->domain, bind->machine_irq) )
|
||||
- goto unbind_out;
|
||||
+ if ( !IS_PRIV(current->domain) )
|
||||
+ {
|
||||
+ int irq = domain_pirq_to_irq(d, bind->machine_irq);
|
||||
+
|
||||
+ if ( irq <= 0 || !irq_access_permitted(current->domain, irq) )
|
||||
+ goto unbind_out;
|
||||
+ }
|
||||
|
||||
if ( iommu_enabled )
|
||||
{
|
||||
--- a/xen/arch/x86/irq.c
|
||||
+++ b/xen/arch/x86/irq.c
|
||||
@@ -184,6 +184,14 @@ int create_irq(int node)
|
||||
desc->arch.used = IRQ_UNUSED;
|
||||
irq = ret;
|
||||
}
|
||||
+ else if ( dom0 )
|
||||
+ {
|
||||
+ ret = irq_permit_access(dom0, irq);
|
||||
+ if ( ret )
|
||||
+ printk(XENLOG_G_ERR
|
||||
+ "Could not grant Dom0 access to IRQ%d (error %d)\n",
|
||||
+ irq, ret);
|
||||
+ }
|
||||
|
||||
return irq;
|
||||
}
|
||||
@@ -280,6 +288,17 @@ void clear_irq_vector(int irq)
|
||||
void destroy_irq(unsigned int irq)
|
||||
{
|
||||
BUG_ON(!MSI_IRQ(irq));
|
||||
+
|
||||
+ if ( dom0 )
|
||||
+ {
|
||||
+ int err = irq_deny_access(dom0, irq);
|
||||
+
|
||||
+ if ( err )
|
||||
+ printk(XENLOG_G_ERR
|
||||
+ "Could not revoke Dom0 access to IRQ%u (error %d)\n",
|
||||
+ irq, err);
|
||||
+ }
|
||||
+
|
||||
dynamic_irq_cleanup(irq);
|
||||
clear_irq_vector(irq);
|
||||
}
|
||||
@@ -1858,7 +1877,7 @@ int map_domain_pirq(
|
||||
|
||||
if ( !IS_PRIV(current->domain) &&
|
||||
!(IS_PRIV_FOR(current->domain, d) &&
|
||||
- irq_access_permitted(current->domain, pirq)))
|
||||
+ irq_access_permitted(current->domain, irq)))
|
||||
return -EPERM;
|
||||
|
||||
if ( pirq < 0 || pirq >= d->nr_pirqs || irq < 0 || irq >= nr_irqs )
|
||||
@@ -1887,17 +1906,18 @@ int map_domain_pirq(
|
||||
return ret;
|
||||
}
|
||||
|
||||
- ret = irq_permit_access(d, pirq);
|
||||
+ ret = irq_permit_access(d, irq);
|
||||
if ( ret )
|
||||
{
|
||||
- dprintk(XENLOG_G_ERR, "dom%d: could not permit access to irq %d\n",
|
||||
- d->domain_id, pirq);
|
||||
+ printk(XENLOG_G_ERR
|
||||
+ "dom%d: could not permit access to IRQ%d (pirq %d)\n",
|
||||
+ d->domain_id, irq, pirq);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = prepare_domain_irq_pirq(d, irq, pirq, &info);
|
||||
if ( ret )
|
||||
- return ret;
|
||||
+ goto revoke;
|
||||
|
||||
desc = irq_to_desc(irq);
|
||||
|
||||
@@ -1921,8 +1941,14 @@ int map_domain_pirq(
|
||||
spin_lock_irqsave(&desc->lock, flags);
|
||||
|
||||
if ( desc->handler != &no_irq_type )
|
||||
+ {
|
||||
+ spin_unlock_irqrestore(&desc->lock, flags);
|
||||
dprintk(XENLOG_G_ERR, "dom%d: irq %d in use\n",
|
||||
d->domain_id, irq);
|
||||
+ pci_disable_msi(msi_desc);
|
||||
+ ret = -EBUSY;
|
||||
+ goto done;
|
||||
+ }
|
||||
setup_msi_handler(desc, msi_desc);
|
||||
|
||||
if ( opt_irq_vector_map == OPT_IRQ_VECTOR_MAP_PERDEV
|
||||
@@ -1951,7 +1977,14 @@ int map_domain_pirq(
|
||||
|
||||
done:
|
||||
if ( ret )
|
||||
+ {
|
||||
cleanup_domain_irq_pirq(d, irq, info);
|
||||
+ revoke:
|
||||
+ if ( irq_deny_access(d, irq) )
|
||||
+ printk(XENLOG_G_ERR
|
||||
+ "dom%d: could not revoke access to IRQ%d (pirq %d)\n",
|
||||
+ d->domain_id, irq, pirq);
|
||||
+ }
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -2017,10 +2050,11 @@ int unmap_domain_pirq(struct domain *d,
|
||||
if ( !forced_unbind )
|
||||
cleanup_domain_irq_pirq(d, irq, info);
|
||||
|
||||
- ret = irq_deny_access(d, pirq);
|
||||
+ ret = irq_deny_access(d, irq);
|
||||
if ( ret )
|
||||
- dprintk(XENLOG_G_ERR, "dom%d: could not deny access to irq %d\n",
|
||||
- d->domain_id, pirq);
|
||||
+ printk(XENLOG_G_ERR
|
||||
+ "dom%d: could not deny access to IRQ%d (pirq %d)\n",
|
||||
+ d->domain_id, irq, pirq);
|
||||
|
||||
done:
|
||||
return ret;
|
||||
--- a/xen/arch/x86/physdev.c
|
||||
+++ b/xen/arch/x86/physdev.c
|
||||
@@ -147,7 +147,7 @@ int physdev_map_pirq(domid_t domid, int
|
||||
if ( irq == -1 )
|
||||
irq = create_irq(NUMA_NO_NODE);
|
||||
|
||||
- if ( irq < 0 || irq >= nr_irqs )
|
||||
+ if ( irq < nr_irqs_gsi || irq >= nr_irqs )
|
||||
{
|
||||
dprintk(XENLOG_G_ERR, "dom%d: can't create irq for msi!\n",
|
||||
d->domain_id);
|
||||
--- a/xen/common/domctl.c
|
||||
+++ b/xen/common/domctl.c
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <xen/paging.h>
|
||||
#include <xen/hypercall.h>
|
||||
#include <asm/current.h>
|
||||
+#include <asm/irq.h>
|
||||
#include <asm/page.h>
|
||||
#include <public/domctl.h>
|
||||
#include <xsm/xsm.h>
|
||||
@@ -897,9 +898,9 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
|
||||
else if ( xsm_irq_permission(d, pirq, allow) )
|
||||
ret = -EPERM;
|
||||
else if ( allow )
|
||||
- ret = irq_permit_access(d, pirq);
|
||||
+ ret = pirq_permit_access(d, pirq);
|
||||
else
|
||||
- ret = irq_deny_access(d, pirq);
|
||||
+ ret = pirq_deny_access(d, pirq);
|
||||
|
||||
rcu_unlock_domain(d);
|
||||
}
|
||||
--- a/xen/common/event_channel.c
|
||||
+++ b/xen/common/event_channel.c
|
||||
@@ -369,7 +369,7 @@ static long evtchn_bind_pirq(evtchn_bind
|
||||
if ( (pirq < 0) || (pirq >= d->nr_pirqs) )
|
||||
return -EINVAL;
|
||||
|
||||
- if ( !is_hvm_domain(d) && !irq_access_permitted(d, pirq) )
|
||||
+ if ( !is_hvm_domain(d) && !pirq_access_permitted(d, pirq) )
|
||||
return -EPERM;
|
||||
|
||||
spin_lock(&d->event_lock);
|
||||
--- a/xen/include/xen/iocap.h
|
||||
+++ b/xen/include/xen/iocap.h
|
||||
@@ -28,4 +28,22 @@
|
||||
#define irq_access_permitted(d, i) \
|
||||
rangeset_contains_singleton((d)->irq_caps, i)
|
||||
|
||||
+#define pirq_permit_access(d, i) ({ \
|
||||
+ struct domain *d__ = (d); \
|
||||
+ int i__ = domain_pirq_to_irq(d__, i); \
|
||||
+ i__ > 0 ? rangeset_add_singleton(d__->irq_caps, i__)\
|
||||
+ : -EINVAL; \
|
||||
+})
|
||||
+#define pirq_deny_access(d, i) ({ \
|
||||
+ struct domain *d__ = (d); \
|
||||
+ int i__ = domain_pirq_to_irq(d__, i); \
|
||||
+ i__ > 0 ? rangeset_remove_singleton(d__->irq_caps, i__)\
|
||||
+ : -EINVAL; \
|
||||
+})
|
||||
+#define pirq_access_permitted(d, i) ({ \
|
||||
+ struct domain *d__ = (d); \
|
||||
+ rangeset_contains_singleton(d__->irq_caps, \
|
||||
+ domain_pirq_to_irq(d__, i));\
|
||||
+})
|
||||
+
|
||||
#endif /* __XEN_IOCAP_H__ */
|
|
@ -1,114 +0,0 @@
|
|||
Add -f FMT / --format FMT arg to qemu-nbd
|
||||
|
||||
From: "Daniel P. Berrange" <berrange@redhat.com>
|
||||
|
||||
Currently the qemu-nbd program will auto-detect the format of
|
||||
any disk it is given. This behaviour is known to be insecure.
|
||||
For example, if qemu-nbd initially exposes a 'raw' file to an
|
||||
unprivileged app, and that app runs
|
||||
|
||||
'qemu-img create -f qcow2 -o backing_file=/etc/shadow /dev/nbd0'
|
||||
|
||||
then the next time the app is started, the qemu-nbd will now
|
||||
detect it as a 'qcow2' file and expose /etc/shadow to the
|
||||
unprivileged app.
|
||||
|
||||
The only way to avoid this is to explicitly tell qemu-nbd what
|
||||
disk format to use on the command line, completely disabling
|
||||
auto-detection. This patch adds a '-f' / '--format' arg for
|
||||
this purpose, mirroring what is already available via qemu-img
|
||||
and qemu commands.
|
||||
|
||||
qemu-nbd --format raw -p 9000 evil.img
|
||||
|
||||
will now always use raw, regardless of what format 'evil.img'
|
||||
looks like it contains
|
||||
|
||||
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
|
||||
[Use errx, not err. - Paolo]
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
|
||||
|
||||
[ This is a security issue, CVE-2013-1922 / XSA-48. ]
|
||||
|
||||
diff --git a/qemu-nbd.c b/qemu-nbd.c
|
||||
index 291cba2..8fbe2cf 100644
|
||||
--- a/tools/qemu-xen/qemu-nbd.c
|
||||
+++ b/tools/qemu-xen/qemu-nbd.c
|
||||
@@ -247,6 +247,7 @@ out:
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
BlockDriverState *bs;
|
||||
+ BlockDriver *drv;
|
||||
off_t dev_offset = 0;
|
||||
off_t offset = 0;
|
||||
uint32_t nbdflags = 0;
|
||||
@@ -256,7 +257,7 @@ int main(int argc, char **argv)
|
||||
struct sockaddr_in addr;
|
||||
socklen_t addr_len = sizeof(addr);
|
||||
off_t fd_size;
|
||||
- const char *sopt = "hVb:o:p:rsnP:c:dvk:e:t";
|
||||
+ const char *sopt = "hVb:o:p:rsnP:c:dvk:e:f:t";
|
||||
struct option lopt[] = {
|
||||
{ "help", 0, NULL, 'h' },
|
||||
{ "version", 0, NULL, 'V' },
|
||||
@@ -271,6 +272,7 @@ int main(int argc, char **argv)
|
||||
{ "snapshot", 0, NULL, 's' },
|
||||
{ "nocache", 0, NULL, 'n' },
|
||||
{ "shared", 1, NULL, 'e' },
|
||||
+ { "format", 1, NULL, 'f' },
|
||||
{ "persistent", 0, NULL, 't' },
|
||||
{ "verbose", 0, NULL, 'v' },
|
||||
{ NULL, 0, NULL, 0 }
|
||||
@@ -292,6 +294,7 @@ int main(int argc, char **argv)
|
||||
int max_fd;
|
||||
int persistent = 0;
|
||||
pthread_t client_thread;
|
||||
+ const char *fmt = NULL;
|
||||
|
||||
/* The client thread uses SIGTERM to interrupt the server. A signal
|
||||
* handler ensures that "qemu-nbd -v -c" exits with a nice status code.
|
||||
@@ -368,6 +371,9 @@ int main(int argc, char **argv)
|
||||
errx(EXIT_FAILURE, "Shared device number must be greater than 0\n");
|
||||
}
|
||||
break;
|
||||
+ case 'f':
|
||||
+ fmt = optarg;
|
||||
+ break;
|
||||
case 't':
|
||||
persistent = 1;
|
||||
break;
|
||||
@@ -478,9 +484,19 @@ int main(int argc, char **argv)
|
||||
bdrv_init();
|
||||
atexit(bdrv_close_all);
|
||||
|
||||
+ if (fmt) {
|
||||
+ drv = bdrv_find_format(fmt);
|
||||
+ if (!drv) {
|
||||
+ errx(EXIT_FAILURE, "Unknown file format '%s'", fmt);
|
||||
+ }
|
||||
+ } else {
|
||||
+ drv = NULL;
|
||||
+ }
|
||||
+
|
||||
bs = bdrv_new("hda");
|
||||
srcpath = argv[optind];
|
||||
- if ((ret = bdrv_open(bs, srcpath, flags, NULL)) < 0) {
|
||||
+ ret = bdrv_open(bs, srcpath, flags, drv);
|
||||
+ if (ret < 0) {
|
||||
errno = -ret;
|
||||
err(EXIT_FAILURE, "Failed to bdrv_open '%s'", argv[optind]);
|
||||
}
|
||||
diff --git a/qemu-nbd.texi b/qemu-nbd.texi
|
||||
index 44996cc..f56c68e 100644
|
||||
--- a/tools/qemu-xen/qemu-nbd.texi
|
||||
+++ b/tools/qemu-xen/qemu-nbd.texi
|
||||
@@ -36,6 +36,8 @@ Export Qemu disk image using NBD protocol.
|
||||
disconnect the specified device
|
||||
@item -e, --shared=@var{num}
|
||||
device can be shared by @var{num} clients (default @samp{1})
|
||||
+@item -f, --format=@var{fmt}
|
||||
+ force block driver for format @var{fmt} instead of auto-detecting
|
||||
@item -t, --persistent
|
||||
don't exit on the last connection
|
||||
@item -v, --verbose
|
|
@ -1,50 +0,0 @@
|
|||
VT-d: don't permit SVT_NO_VERIFY entries for known device types
|
||||
|
||||
Only in cases where we don't know what to do we should leave the IRTE
|
||||
blank (suppressing all validation), but we should always log a warning
|
||||
in those cases (as being insecure).
|
||||
|
||||
This is CVE-2013-1952 / XSA-49.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Acked-by: "Zhang, Xiantao" <xiantao.zhang@intel.com>
|
||||
|
||||
--- a/xen/drivers/passthrough/vtd/intremap.c
|
||||
+++ b/xen/drivers/passthrough/vtd/intremap.c
|
||||
@@ -440,16 +440,15 @@ static void set_msi_source_id(struct pci
|
||||
type = pdev_type(seg, bus, devfn);
|
||||
switch ( type )
|
||||
{
|
||||
+ case DEV_TYPE_PCIe_ENDPOINT:
|
||||
case DEV_TYPE_PCIe_BRIDGE:
|
||||
case DEV_TYPE_PCIe2PCI_BRIDGE:
|
||||
- case DEV_TYPE_LEGACY_PCI_BRIDGE:
|
||||
- break;
|
||||
-
|
||||
- case DEV_TYPE_PCIe_ENDPOINT:
|
||||
set_ire_sid(ire, SVT_VERIFY_SID_SQ, SQ_ALL_16, PCI_BDF2(bus, devfn));
|
||||
break;
|
||||
|
||||
case DEV_TYPE_PCI:
|
||||
+ case DEV_TYPE_LEGACY_PCI_BRIDGE:
|
||||
+ /* case DEV_TYPE_PCI2PCIe_BRIDGE: */
|
||||
ret = find_upstream_bridge(seg, &bus, &devfn, &secbus);
|
||||
if ( ret == 0 ) /* integrated PCI device */
|
||||
{
|
||||
@@ -461,10 +460,15 @@ static void set_msi_source_id(struct pci
|
||||
if ( pdev_type(seg, bus, devfn) == DEV_TYPE_PCIe2PCI_BRIDGE )
|
||||
set_ire_sid(ire, SVT_VERIFY_BUS, SQ_ALL_16,
|
||||
(bus << 8) | pdev->bus);
|
||||
- else if ( pdev_type(seg, bus, devfn) == DEV_TYPE_LEGACY_PCI_BRIDGE )
|
||||
+ else
|
||||
set_ire_sid(ire, SVT_VERIFY_SID_SQ, SQ_ALL_16,
|
||||
PCI_BDF2(bus, devfn));
|
||||
}
|
||||
+ else
|
||||
+ dprintk(XENLOG_WARNING VTDPREFIX,
|
||||
+ "d%d: no upstream bridge for %04x:%02x:%02x.%u\n",
|
||||
+ pdev->domain->domain_id,
|
||||
+ seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn));
|
||||
break;
|
||||
|
||||
default:
|
|
@ -1,41 +0,0 @@
|
|||
diff -ur xen-4.2.1.orig/xen/drivers/passthrough/vtd/intremap.c xen-4.2.1/xen/drivers/passthrough/vtd/intremap.c
|
||||
--- xen/drivers/passthrough/vtd/intremap.c 2012-12-17 23:01:55.000000000 +0800
|
||||
+++ xen/drivers/passthrough/vtd/intremap.c 2013-05-15 23:09:06.704546506 +0800
|
||||
@@ -440,16 +440,17 @@
|
||||
type = pdev_type(seg, bus, devfn);
|
||||
switch ( type )
|
||||
{
|
||||
+ case DEV_TYPE_PCIe_ENDPOINT:
|
||||
case DEV_TYPE_PCIe_BRIDGE:
|
||||
case DEV_TYPE_PCIe2PCI_BRIDGE:
|
||||
- case DEV_TYPE_LEGACY_PCI_BRIDGE:
|
||||
- break;
|
||||
|
||||
- case DEV_TYPE_PCIe_ENDPOINT:
|
||||
set_ire_sid(ire, SVT_VERIFY_SID_SQ, SQ_ALL_16, PCI_BDF2(bus, devfn));
|
||||
break;
|
||||
|
||||
case DEV_TYPE_PCI:
|
||||
+ case DEV_TYPE_LEGACY_PCI_BRIDGE:
|
||||
+ /* case DEV_TYPE_PCI2PCIe_BRIDGE: */
|
||||
+
|
||||
ret = find_upstream_bridge(seg, &bus, &devfn, &secbus);
|
||||
if ( ret == 0 ) /* integrated PCI device */
|
||||
{
|
||||
@@ -461,10 +462,15 @@
|
||||
if ( pdev_type(seg, bus, devfn) == DEV_TYPE_PCIe2PCI_BRIDGE )
|
||||
set_ire_sid(ire, SVT_VERIFY_BUS, SQ_ALL_16,
|
||||
(bus << 8) | pdev->bus);
|
||||
- else if ( pdev_type(seg, bus, devfn) == DEV_TYPE_LEGACY_PCI_BRIDGE )
|
||||
+ else
|
||||
set_ire_sid(ire, SVT_VERIFY_BUS, SQ_ALL_16,
|
||||
PCI_BDF2(bus, devfn));
|
||||
}
|
||||
+ else
|
||||
+ dprintk(XENLOG_WARNING VTDPREFIX,
|
||||
+ "d%d: no upstream bridge for %04x:%02x:%02x.%u\n",
|
||||
+ pdev->domain->domain_id,
|
||||
+ seg, bus, PCI_SLOT(devfn), PCI_FUNC(devfn));
|
||||
break;
|
||||
|
||||
default:
|
|
@ -1,50 +0,0 @@
|
|||
libxc: limit cpu values when setting vcpu affinity
|
||||
|
||||
When support for pinning more than 64 cpus was added, check for cpu
|
||||
out-of-range values was removed. This can lead to subsequent
|
||||
out-of-bounds cpumap array accesses in case the cpu number is higher
|
||||
than the actual count.
|
||||
|
||||
This patch returns the check.
|
||||
|
||||
This is CVE-2013-2072 / XSA-56
|
||||
|
||||
Signed-off-by: Petr Matousek <pmatouse@redhat.com>
|
||||
|
||||
diff --git a/tools/python/xen/lowlevel/xc/xc.c b/tools/python/xen/lowlevel/xc/xc.c
|
||||
index e220f68..e611b24 100644
|
||||
--- a/tools/python/xen/lowlevel/xc/xc.c
|
||||
+++ b/tools/python/xen/lowlevel/xc/xc.c
|
||||
@@ -228,6 +228,7 @@ static PyObject *pyxc_vcpu_setaffinity(XcObject *self,
|
||||
int vcpu = 0, i;
|
||||
xc_cpumap_t cpumap;
|
||||
PyObject *cpulist = NULL;
|
||||
+ int nr_cpus;
|
||||
|
||||
static char *kwd_list[] = { "domid", "vcpu", "cpumap", NULL };
|
||||
|
||||
@@ -235,6 +236,10 @@ static PyObject *pyxc_vcpu_setaffinity(XcObject *self,
|
||||
&dom, &vcpu, &cpulist) )
|
||||
return NULL;
|
||||
|
||||
+ nr_cpus = xc_get_max_cpus(self->xc_handle);
|
||||
+ if ( nr_cpus == 0 )
|
||||
+ return pyxc_error_to_exception(self->xc_handle);
|
||||
+
|
||||
cpumap = xc_cpumap_alloc(self->xc_handle);
|
||||
if(cpumap == NULL)
|
||||
return pyxc_error_to_exception(self->xc_handle);
|
||||
@@ -244,6 +249,13 @@ static PyObject *pyxc_vcpu_setaffinity(XcObject *self,
|
||||
for ( i = 0; i < PyList_Size(cpulist); i++ )
|
||||
{
|
||||
long cpu = PyInt_AsLong(PyList_GetItem(cpulist, i));
|
||||
+ if ( cpu < 0 || cpu >= nr_cpus )
|
||||
+ {
|
||||
+ free(cpumap);
|
||||
+ errno = EINVAL;
|
||||
+ PyErr_SetFromErrno(xc_error_obj);
|
||||
+ return NULL;
|
||||
+ }
|
||||
cpumap[cpu / 8] |= 1 << (cpu % 8);
|
||||
}
|
||||
}
|
|
@ -1,417 +0,0 @@
|
|||
From 9737484becab4a25159f1e985700eaee89690d34 Mon Sep 17 00:00:00 2001
|
||||
From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Date: Fri, 14 Jun 2013 16:43:15 +0100
|
||||
Subject: [PATCH 01/23] libelf: abolish libelf-relocate.c
|
||||
|
||||
This file is not actually used. It's not built in Xen's instance of
|
||||
libelf; in libxc's it's built but nothing in it is called. Do not
|
||||
compile it in libxc, and delete it.
|
||||
|
||||
This reduces the amount of work we need to do in forthcoming patches
|
||||
to libelf (particularly since as libelf-relocate.c is not used it is
|
||||
probably full of bugs).
|
||||
|
||||
This is part of the fix to a security issue, XSA-55.
|
||||
|
||||
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
---
|
||||
tools/libxc/Makefile | 2 +-
|
||||
xen/common/libelf/libelf-relocate.c | 372 -----------------------------------
|
||||
2 files changed, 1 insertions(+), 373 deletions(-)
|
||||
delete mode 100644 xen/common/libelf/libelf-relocate.c
|
||||
|
||||
diff --git a/tools/libxc/Makefile b/tools/libxc/Makefile
|
||||
index ca38cbd..d8c6a60 100644
|
||||
--- a/tools/libxc/Makefile
|
||||
+++ b/tools/libxc/Makefile
|
||||
@@ -53,7 +53,7 @@ vpath %.c ../../xen/common/libelf
|
||||
CFLAGS += -I../../xen/common/libelf
|
||||
|
||||
GUEST_SRCS-y += libelf-tools.c libelf-loader.c
|
||||
-GUEST_SRCS-y += libelf-dominfo.c libelf-relocate.c
|
||||
+GUEST_SRCS-y += libelf-dominfo.c
|
||||
|
||||
# new domain builder
|
||||
GUEST_SRCS-y += xc_dom_core.c xc_dom_boot.c
|
||||
diff --git a/xen/common/libelf/libelf-relocate.c b/xen/common/libelf/libelf-relocate.c
|
||||
#deleted file mode 100644
|
||||
index 7ef4b01..0000000
|
||||
--- a/xen/common/libelf/libelf-relocate.c
|
||||
+++ /dev/null
|
||||
@@ -1,372 +0,0 @@
|
||||
-/*
|
||||
- * ELF relocation code (not used by xen kernel right now).
|
||||
- *
|
||||
- * This library is free software; you can redistribute it and/or
|
||||
- * modify it under the terms of the GNU Lesser General Public
|
||||
- * License as published by the Free Software Foundation;
|
||||
- * version 2.1 of the License.
|
||||
- *
|
||||
- * This library is distributed in the hope that it will be useful,
|
||||
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
- * Lesser General Public License for more details.
|
||||
- *
|
||||
- * You should have received a copy of the GNU Lesser General Public
|
||||
- * License along with this library; if not, write to the Free Software
|
||||
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
- */
|
||||
-
|
||||
-#include "libelf-private.h"
|
||||
-
|
||||
-/* ------------------------------------------------------------------------ */
|
||||
-
|
||||
-static const char *rel_names_i386[] = {
|
||||
- "R_386_NONE",
|
||||
- "R_386_32",
|
||||
- "R_386_PC32",
|
||||
- "R_386_GOT32",
|
||||
- "R_386_PLT32",
|
||||
- "R_386_COPY",
|
||||
- "R_386_GLOB_DAT",
|
||||
- "R_386_JMP_SLOT",
|
||||
- "R_386_RELATIVE",
|
||||
- "R_386_GOTOFF",
|
||||
- "R_386_GOTPC",
|
||||
- "R_386_32PLT",
|
||||
- "R_386_TLS_TPOFF",
|
||||
- "R_386_TLS_IE",
|
||||
- "R_386_TLS_GOTIE",
|
||||
- "R_386_TLS_LE",
|
||||
- "R_386_TLS_GD",
|
||||
- "R_386_TLS_LDM",
|
||||
- "R_386_16",
|
||||
- "R_386_PC16",
|
||||
- "R_386_8",
|
||||
- "R_386_PC8",
|
||||
- "R_386_TLS_GD_32",
|
||||
- "R_386_TLS_GD_PUSH",
|
||||
- "R_386_TLS_GD_CALL",
|
||||
- "R_386_TLS_GD_POP",
|
||||
- "R_386_TLS_LDM_32",
|
||||
- "R_386_TLS_LDM_PUSH",
|
||||
- "R_386_TLS_LDM_CALL",
|
||||
- "R_386_TLS_LDM_POP",
|
||||
- "R_386_TLS_LDO_32",
|
||||
- "R_386_TLS_IE_32",
|
||||
- "R_386_TLS_LE_32",
|
||||
- "R_386_TLS_DTPMOD32",
|
||||
- "R_386_TLS_DTPOFF32",
|
||||
- "R_386_TLS_TPOFF32",
|
||||
-};
|
||||
-
|
||||
-static int elf_reloc_i386(struct elf_binary *elf, int type,
|
||||
- uint64_t addr, uint64_t value)
|
||||
-{
|
||||
- void *ptr = elf_get_ptr(elf, addr);
|
||||
- uint32_t *u32;
|
||||
-
|
||||
- switch ( type )
|
||||
- {
|
||||
- case 1 /* R_386_32 */ :
|
||||
- u32 = ptr;
|
||||
- *u32 += elf->reloc_offset;
|
||||
- break;
|
||||
- case 2 /* R_386_PC32 */ :
|
||||
- /* nothing */
|
||||
- break;
|
||||
- default:
|
||||
- return -1;
|
||||
- }
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-/* ------------------------------------------------------------------------ */
|
||||
-
|
||||
-static const char *rel_names_x86_64[] = {
|
||||
- "R_X86_64_NONE",
|
||||
- "R_X86_64_64",
|
||||
- "R_X86_64_PC32",
|
||||
- "R_X86_64_GOT32",
|
||||
- "R_X86_64_PLT32",
|
||||
- "R_X86_64_COPY",
|
||||
- "R_X86_64_GLOB_DAT",
|
||||
- "R_X86_64_JUMP_SLOT",
|
||||
- "R_X86_64_RELATIVE",
|
||||
- "R_X86_64_GOTPCREL",
|
||||
- "R_X86_64_32",
|
||||
- "R_X86_64_32S",
|
||||
- "R_X86_64_16",
|
||||
- "R_X86_64_PC16",
|
||||
- "R_X86_64_8",
|
||||
- "R_X86_64_PC8",
|
||||
- "R_X86_64_DTPMOD64",
|
||||
- "R_X86_64_DTPOFF64",
|
||||
- "R_X86_64_TPOFF64",
|
||||
- "R_X86_64_TLSGD",
|
||||
- "R_X86_64_TLSLD",
|
||||
- "R_X86_64_DTPOFF32",
|
||||
- "R_X86_64_GOTTPOFF",
|
||||
- "R_X86_64_TPOFF32",
|
||||
-};
|
||||
-
|
||||
-static int elf_reloc_x86_64(struct elf_binary *elf, int type,
|
||||
- uint64_t addr, uint64_t value)
|
||||
-{
|
||||
- void *ptr = elf_get_ptr(elf, addr);
|
||||
- uint64_t *u64;
|
||||
- uint32_t *u32;
|
||||
- int32_t *s32;
|
||||
-
|
||||
- switch ( type )
|
||||
- {
|
||||
- case 1 /* R_X86_64_64 */ :
|
||||
- u64 = ptr;
|
||||
- value += elf->reloc_offset;
|
||||
- *u64 = value;
|
||||
- break;
|
||||
- case 2 /* R_X86_64_PC32 */ :
|
||||
- u32 = ptr;
|
||||
- *u32 = value - addr;
|
||||
- if ( *u32 != (uint32_t)(value - addr) )
|
||||
- {
|
||||
- elf_err(elf, "R_X86_64_PC32 overflow: 0x%" PRIx32
|
||||
- " != 0x%" PRIx32 "\n",
|
||||
- *u32, (uint32_t) (value - addr));
|
||||
- return -1;
|
||||
- }
|
||||
- break;
|
||||
- case 10 /* R_X86_64_32 */ :
|
||||
- u32 = ptr;
|
||||
- value += elf->reloc_offset;
|
||||
- *u32 = value;
|
||||
- if ( *u32 != value )
|
||||
- {
|
||||
- elf_err(elf, "R_X86_64_32 overflow: 0x%" PRIx32
|
||||
- " != 0x%" PRIx64 "\n",
|
||||
- *u32, value);
|
||||
- return -1;
|
||||
- }
|
||||
- break;
|
||||
- case 11 /* R_X86_64_32S */ :
|
||||
- s32 = ptr;
|
||||
- value += elf->reloc_offset;
|
||||
- *s32 = value;
|
||||
- if ( *s32 != (int64_t) value )
|
||||
- {
|
||||
- elf_err(elf, "R_X86_64_32S overflow: 0x%" PRIx32
|
||||
- " != 0x%" PRIx64 "\n",
|
||||
- *s32, (int64_t) value);
|
||||
- return -1;
|
||||
- }
|
||||
- break;
|
||||
- default:
|
||||
- return -1;
|
||||
- }
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-/* ------------------------------------------------------------------------ */
|
||||
-
|
||||
-static struct relocs {
|
||||
- const char **names;
|
||||
- int count;
|
||||
- int (*func) (struct elf_binary * elf, int type, uint64_t addr,
|
||||
- uint64_t value);
|
||||
-} relocs[] =
|
||||
-/* *INDENT-OFF* */
|
||||
-{
|
||||
- [EM_386] = {
|
||||
- .names = rel_names_i386,
|
||||
- .count = sizeof(rel_names_i386) / sizeof(rel_names_i386[0]),
|
||||
- .func = elf_reloc_i386,
|
||||
- },
|
||||
- [EM_X86_64] = {
|
||||
- .names = rel_names_x86_64,
|
||||
- .count = sizeof(rel_names_x86_64) / sizeof(rel_names_x86_64[0]),
|
||||
- .func = elf_reloc_x86_64,
|
||||
- }
|
||||
-};
|
||||
-/* *INDENT-ON* */
|
||||
-
|
||||
-/* ------------------------------------------------------------------------ */
|
||||
-
|
||||
-static const char *rela_name(int machine, int type)
|
||||
-{
|
||||
- if ( machine > sizeof(relocs) / sizeof(relocs[0]) )
|
||||
- return "unknown mach";
|
||||
- if ( !relocs[machine].names )
|
||||
- return "unknown mach";
|
||||
- if ( type > relocs[machine].count )
|
||||
- return "unknown rela";
|
||||
- return relocs[machine].names[type];
|
||||
-}
|
||||
-
|
||||
-static int elf_reloc_section(struct elf_binary *elf,
|
||||
- const elf_shdr * rels,
|
||||
- const elf_shdr * sect, const elf_shdr * syms)
|
||||
-{
|
||||
- const void *ptr, *end;
|
||||
- const elf_shdr *shdr;
|
||||
- const elf_rela *rela;
|
||||
- const elf_rel *rel;
|
||||
- const elf_sym *sym;
|
||||
- uint64_t s_type;
|
||||
- uint64_t r_offset;
|
||||
- uint64_t r_info;
|
||||
- uint64_t r_addend;
|
||||
- int r_type, r_sym;
|
||||
- size_t rsize;
|
||||
- uint64_t shndx, sbase, addr, value;
|
||||
- const char *sname;
|
||||
- int machine;
|
||||
-
|
||||
- machine = elf_uval(elf, elf->ehdr, e_machine);
|
||||
- if ( (machine >= (sizeof(relocs) / sizeof(relocs[0]))) ||
|
||||
- (relocs[machine].func == NULL) )
|
||||
- {
|
||||
- elf_err(elf, "%s: can't handle machine %d\n",
|
||||
- __FUNCTION__, machine);
|
||||
- return -1;
|
||||
- }
|
||||
- if ( elf_swap(elf) )
|
||||
- {
|
||||
- elf_err(elf, "%s: non-native byte order, relocation not supported\n",
|
||||
- __FUNCTION__);
|
||||
- return -1;
|
||||
- }
|
||||
-
|
||||
- s_type = elf_uval(elf, rels, sh_type);
|
||||
- rsize = (SHT_REL == s_type) ? elf_size(elf, rel) : elf_size(elf, rela);
|
||||
- ptr = elf_section_start(elf, rels);
|
||||
- end = elf_section_end(elf, rels);
|
||||
-
|
||||
- for ( ; ptr < end; ptr += rsize )
|
||||
- {
|
||||
- switch ( s_type )
|
||||
- {
|
||||
- case SHT_REL:
|
||||
- rel = ptr;
|
||||
- r_offset = elf_uval(elf, rel, r_offset);
|
||||
- r_info = elf_uval(elf, rel, r_info);
|
||||
- r_addend = 0;
|
||||
- break;
|
||||
- case SHT_RELA:
|
||||
- rela = ptr;
|
||||
- r_offset = elf_uval(elf, rela, r_offset);
|
||||
- r_info = elf_uval(elf, rela, r_info);
|
||||
- r_addend = elf_uval(elf, rela, r_addend);
|
||||
- break;
|
||||
- default:
|
||||
- /* can't happen */
|
||||
- return -1;
|
||||
- }
|
||||
- if ( elf_64bit(elf) )
|
||||
- {
|
||||
- r_type = ELF64_R_TYPE(r_info);
|
||||
- r_sym = ELF64_R_SYM(r_info);
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- r_type = ELF32_R_TYPE(r_info);
|
||||
- r_sym = ELF32_R_SYM(r_info);
|
||||
- }
|
||||
-
|
||||
- sym = elf_sym_by_index(elf, r_sym);
|
||||
- shndx = elf_uval(elf, sym, st_shndx);
|
||||
- switch ( shndx )
|
||||
- {
|
||||
- case SHN_UNDEF:
|
||||
- sname = "*UNDEF*";
|
||||
- sbase = 0;
|
||||
- break;
|
||||
- case SHN_COMMON:
|
||||
- elf_err(elf, "%s: invalid section: %" PRId64 "\n",
|
||||
- __FUNCTION__, shndx);
|
||||
- return -1;
|
||||
- case SHN_ABS:
|
||||
- sname = "*ABS*";
|
||||
- sbase = 0;
|
||||
- break;
|
||||
- default:
|
||||
- shdr = elf_shdr_by_index(elf, shndx);
|
||||
- if ( shdr == NULL )
|
||||
- {
|
||||
- elf_err(elf, "%s: invalid section: %" PRId64 "\n",
|
||||
- __FUNCTION__, shndx);
|
||||
- return -1;
|
||||
- }
|
||||
- sname = elf_section_name(elf, shdr);
|
||||
- sbase = elf_uval(elf, shdr, sh_addr);
|
||||
- }
|
||||
-
|
||||
- addr = r_offset;
|
||||
- value = elf_uval(elf, sym, st_value);
|
||||
- value += r_addend;
|
||||
-
|
||||
- if ( elf->log_callback && (elf->verbose > 1) )
|
||||
- {
|
||||
- uint64_t st_name = elf_uval(elf, sym, st_name);
|
||||
- const char *name = st_name ? elf->sym_strtab + st_name : "*NONE*";
|
||||
-
|
||||
- elf_msg(elf,
|
||||
- "%s: type %s [%d], off 0x%" PRIx64 ", add 0x%" PRIx64 ","
|
||||
- " sym %s [0x%" PRIx64 "], sec %s [0x%" PRIx64 "]"
|
||||
- " -> addr 0x%" PRIx64 " value 0x%" PRIx64 "\n",
|
||||
- __FUNCTION__, rela_name(machine, r_type), r_type, r_offset,
|
||||
- r_addend, name, elf_uval(elf, sym, st_value), sname, sbase,
|
||||
- addr, value);
|
||||
- }
|
||||
-
|
||||
- if ( relocs[machine].func(elf, r_type, addr, value) == -1 )
|
||||
- {
|
||||
- elf_err(elf, "%s: unknown/unsupported reloc type %s [%d]\n",
|
||||
- __FUNCTION__, rela_name(machine, r_type), r_type);
|
||||
- return -1;
|
||||
- }
|
||||
- }
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-int elf_reloc(struct elf_binary *elf)
|
||||
-{
|
||||
- const elf_shdr *rels, *sect, *syms;
|
||||
- uint64_t i, count, type;
|
||||
-
|
||||
- count = elf_shdr_count(elf);
|
||||
- for ( i = 0; i < count; i++ )
|
||||
- {
|
||||
- rels = elf_shdr_by_index(elf, i);
|
||||
- type = elf_uval(elf, rels, sh_type);
|
||||
- if ( (type != SHT_REL) && (type != SHT_RELA) )
|
||||
- continue;
|
||||
-
|
||||
- sect = elf_shdr_by_index(elf, elf_uval(elf, rels, sh_info));
|
||||
- syms = elf_shdr_by_index(elf, elf_uval(elf, rels, sh_link));
|
||||
- if ( NULL == sect || NULL == syms )
|
||||
- continue;
|
||||
-
|
||||
- if ( !(elf_uval(elf, sect, sh_flags) & SHF_ALLOC) )
|
||||
- {
|
||||
- elf_msg(elf, "%s: relocations for %s, skipping\n",
|
||||
- __FUNCTION__, elf_section_name(elf, sect));
|
||||
- continue;
|
||||
- }
|
||||
-
|
||||
- elf_msg(elf, "%s: relocations for %s @ 0x%" PRIx64 "\n",
|
||||
- __FUNCTION__, elf_section_name(elf, sect),
|
||||
- elf_uval(elf, sect, sh_addr));
|
||||
- if ( elf_reloc_section(elf, rels, sect, syms) != 0 )
|
||||
- return -1;
|
||||
- }
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-/*
|
||||
- * Local variables:
|
||||
- * mode: C
|
||||
- * c-set-style: "BSD"
|
||||
- * c-basic-offset: 4
|
||||
- * tab-width: 4
|
||||
- * indent-tabs-mode: nil
|
||||
- * End:
|
||||
- */
|
||||
--
|
||||
#1.7.2.5
|
||||
|
|
@ -1,371 +0,0 @@
|
|||
From d0790bdad7496e720416b2d4a04563c4c27e7b95 Mon Sep 17 00:00:00 2001
|
||||
From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Date: Fri, 14 Jun 2013 16:43:17 +0100
|
||||
Subject: [PATCH 12/23] libelf: Check pointer references in elf_is_elfbinary
|
||||
|
||||
elf_is_elfbinary didn't take a length parameter and could potentially
|
||||
access out of range when provided with a very short image.
|
||||
|
||||
We only need to check the size is enough for the actual dereference in
|
||||
elf_is_elfbinary; callers are just using it to check the magic number
|
||||
and do their own checks (usually via the new elf_ptrval system) before
|
||||
dereferencing other parts of the header.
|
||||
|
||||
This is part of the fix to a security issue, XSA-55.
|
||||
|
||||
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
---
|
||||
tools/libxc/xc_dom_elfloader.c | 2 +-
|
||||
xen/arch/x86/bzimage.c | 4 ++--
|
||||
xen/common/libelf/libelf-loader.c | 2 +-
|
||||
xen/common/libelf/libelf-tools.c | 9 ++++++---
|
||||
xen/include/xen/libelf.h | 4 +++-
|
||||
5 files changed, 13 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c
|
||||
index b82a08c..ea45886 100644
|
||||
--- a/tools/libxc/xc_dom_elfloader.c
|
||||
+++ b/tools/libxc/xc_dom_elfloader.c
|
||||
@@ -95,7 +95,7 @@ static int check_elf_kernel(struct xc_dom_image *dom, int verbose)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- if ( !elf_is_elfbinary(dom->kernel_blob) )
|
||||
+ if ( !elf_is_elfbinary(dom->kernel_blob, dom->kernel_size) )
|
||||
{
|
||||
if ( verbose )
|
||||
xc_dom_panic(dom->xch,
|
||||
diff --git a/xen/arch/x86/bzimage.c b/xen/arch/x86/bzimage.c
|
||||
index 5adc223..3600dca 100644
|
||||
--- a/xen/arch/x86/bzimage.c
|
||||
+++ b/xen/arch/x86/bzimage.c
|
||||
@@ -220,7 +220,7 @@ unsigned long __init bzimage_headroom(char *image_start,
|
||||
image_length = hdr->payload_length;
|
||||
}
|
||||
|
||||
- if ( elf_is_elfbinary(image_start) )
|
||||
+ if ( elf_is_elfbinary(image_start, image_length) )
|
||||
return 0;
|
||||
|
||||
orig_image_len = image_length;
|
||||
@@ -251,7 +251,7 @@ int __init bzimage_parse(char *image_base, char **image_start, unsigned long *im
|
||||
*image_len = hdr->payload_length;
|
||||
}
|
||||
|
||||
- if ( elf_is_elfbinary(*image_start) )
|
||||
+ if ( elf_is_elfbinary(*image_start, *image_len) )
|
||||
return 0;
|
||||
|
||||
BUG_ON(!(image_base < *image_start));
|
||||
diff --git a/xen/common/libelf/libelf-loader.c b/xen/common/libelf/libelf-loader.c
|
||||
index a3310e7..f8be635 100644
|
||||
--- a/xen/common/libelf/libelf-loader.c
|
||||
+++ b/xen/common/libelf/libelf-loader.c
|
||||
@@ -29,7 +29,7 @@ int elf_init(struct elf_binary *elf, const char *image_input, size_t size)
|
||||
ELF_HANDLE_DECL(elf_shdr) shdr;
|
||||
uint64_t i, count, section, offset;
|
||||
|
||||
- if ( !elf_is_elfbinary(image_input) )
|
||||
+ if ( !elf_is_elfbinary(image_input, size) )
|
||||
{
|
||||
elf_err(elf, "%s: not an ELF binary\n", __FUNCTION__);
|
||||
return -1;
|
||||
diff --git a/xen/common/libelf/libelf-tools.c b/xen/common/libelf/libelf-tools.c
|
||||
index 46ca553..744027e 100644
|
||||
--- a/xen/common/libelf/libelf-tools.c
|
||||
+++ b/xen/common/libelf/libelf-tools.c
|
||||
@@ -332,11 +332,14 @@ ELF_HANDLE_DECL(elf_note) elf_note_next(struct elf_binary *elf, ELF_HANDLE_DECL(
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
-int elf_is_elfbinary(const void *image)
|
||||
+int elf_is_elfbinary(const void *image_start, size_t image_size)
|
||||
{
|
||||
- const Elf32_Ehdr *ehdr = image;
|
||||
+ const Elf32_Ehdr *ehdr = image_start;
|
||||
|
||||
- return IS_ELF(*ehdr); /* fixme unchecked */
|
||||
+ if ( image_size < sizeof(*ehdr) )
|
||||
+ return 0;
|
||||
+
|
||||
+ return IS_ELF(*ehdr);
|
||||
}
|
||||
|
||||
int elf_phdr_is_loadable(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr)
|
||||
diff --git a/xen/include/xen/libelf.h b/xen/include/xen/libelf.h
|
||||
index ddc3ed7..ac93858 100644
|
||||
--- a/xen/include/xen/libelf.h
|
||||
+++ b/xen/include/xen/libelf.h
|
||||
@@ -350,7 +350,9 @@ uint64_t elf_note_numeric_array(struct elf_binary *, ELF_HANDLE_DECL(elf_note),
|
||||
unsigned int unitsz, unsigned int idx);
|
||||
ELF_HANDLE_DECL(elf_note) elf_note_next(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note);
|
||||
|
||||
-int elf_is_elfbinary(const void *image);
|
||||
+/* (Only) checks that the image has the right magic number. */
|
||||
+int elf_is_elfbinary(const void *image_start, size_t image_size);
|
||||
+
|
||||
int elf_phdr_is_loadable(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr);
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
--
|
||||
1.7.2.5
|
||||
#From a965b8f80388603d439ae2b8ee7b9b018a079f90 Mon Sep 17 00:00:00 2001
|
||||
#From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
#Date: Fri, 14 Jun 2013 16:43:17 +0100
|
||||
#Subject: [PATCH 13/23] libelf: Make all callers call elf_check_broken
|
||||
#
|
||||
#This arranges that if the new pointer reference error checking
|
||||
#tripped, we actually get a message about it. In this patch these
|
||||
#messages do not change the actual return values from the various
|
||||
#functions: so pointer reference errors do not prevent loading. This
|
||||
#is for fear that some existing kernels might cause the code to make
|
||||
#these wild references, which would then break, which is not a good
|
||||
#thing in a security patch.
|
||||
#
|
||||
#In xen/arch/x86/domain_build.c we have to introduce an "out" label and
|
||||
#change all of the "return rc" beyond the relevant point into "goto
|
||||
#out".
|
||||
#
|
||||
#Difference in the 4.2 series, compared to unstable:
|
||||
#
|
||||
#* tools/libxc/xc_hvm_build_x86.c:setup_guest and
|
||||
# xen/arch/arm/kernel.c:kernel_try_elf_prepare have different
|
||||
# error handling in 4.2 to unstable; patch adjusted accordingly.
|
||||
#
|
||||
#This is part of the fix to a security issue, XSA-55.
|
||||
#
|
||||
#Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
#
|
||||
#xen-unstable version Reviewed-by: George Dunlap <george.dunlap@eu.citrix.com>
|
||||
#---
|
||||
# tools/libxc/xc_dom_elfloader.c | 25 +++++++++++++++++++++----
|
||||
# tools/libxc/xc_hvm_build_x86.c | 5 +++++
|
||||
# tools/xcutils/readnotes.c | 3 +++
|
||||
# xen/arch/arm/kernel.c | 15 ++++++++++++++-
|
||||
# xen/arch/x86/domain_build.c | 28 +++++++++++++++++++++-------
|
||||
# 5 files changed, 64 insertions(+), 12 deletions(-)
|
||||
#
|
||||
diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c
|
||||
index ea45886..4fb4da2 100644
|
||||
--- a/tools/libxc/xc_dom_elfloader.c
|
||||
+++ b/tools/libxc/xc_dom_elfloader.c
|
||||
@@ -276,6 +276,13 @@ static int xc_dom_load_elf_symtab(struct xc_dom_image *dom,
|
||||
elf_store_field(elf, shdr, e32.sh_name, 0);
|
||||
}
|
||||
|
||||
+ if ( elf_check_broken(&syms) )
|
||||
+ DOMPRINTF("%s: symbols ELF broken: %s", __FUNCTION__,
|
||||
+ elf_check_broken(&syms));
|
||||
+ if ( elf_check_broken(elf) )
|
||||
+ DOMPRINTF("%s: ELF broken: %s", __FUNCTION__,
|
||||
+ elf_check_broken(elf));
|
||||
+
|
||||
if ( tables == 0 )
|
||||
{
|
||||
DOMPRINTF("%s: no symbol table present", __FUNCTION__);
|
||||
@@ -312,19 +319,23 @@ static int xc_dom_parse_elf_kernel(struct xc_dom_image *dom)
|
||||
{
|
||||
xc_dom_panic(dom->xch, XC_INVALID_KERNEL, "%s: ELF image"
|
||||
" has no shstrtab", __FUNCTION__);
|
||||
- return -EINVAL;
|
||||
+ rc = -EINVAL;
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
/* parse binary and get xen meta info */
|
||||
elf_parse_binary(elf);
|
||||
if ( (rc = elf_xen_parse(elf, &dom->parms)) != 0 )
|
||||
- return rc;
|
||||
+ {
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
if ( elf_xen_feature_get(XENFEAT_dom0, dom->parms.f_required) )
|
||||
{
|
||||
xc_dom_panic(dom->xch, XC_INVALID_KERNEL, "%s: Kernel does not"
|
||||
" support unprivileged (DomU) operation", __FUNCTION__);
|
||||
- return -EINVAL;
|
||||
+ rc = -EINVAL;
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
/* find kernel segment */
|
||||
@@ -338,7 +349,13 @@ static int xc_dom_parse_elf_kernel(struct xc_dom_image *dom)
|
||||
DOMPRINTF("%s: %s: 0x%" PRIx64 " -> 0x%" PRIx64 "",
|
||||
__FUNCTION__, dom->guest_type,
|
||||
dom->kernel_seg.vstart, dom->kernel_seg.vend);
|
||||
- return 0;
|
||||
+ rc = 0;
|
||||
+out:
|
||||
+ if ( elf_check_broken(elf) )
|
||||
+ DOMPRINTF("%s: ELF broken: %s", __FUNCTION__,
|
||||
+ elf_check_broken(elf));
|
||||
+
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
static int xc_dom_load_elf_kernel(struct xc_dom_image *dom)
|
||||
diff --git a/tools/libxc/xc_hvm_build_x86.c b/tools/libxc/xc_hvm_build_x86.c
|
||||
index ccfd8b5..8165287 100644
|
||||
--- a/tools/libxc/xc_hvm_build_x86.c
|
||||
+++ b/tools/libxc/xc_hvm_build_x86.c
|
||||
@@ -403,11 +403,16 @@ static int setup_guest(xc_interface *xch,
|
||||
munmap(page0, PAGE_SIZE);
|
||||
}
|
||||
|
||||
+ if ( elf_check_broken(&elf) )
|
||||
+ ERROR("HVM ELF broken: %s", elf_check_broken(&elf));
|
||||
+
|
||||
free(page_array);
|
||||
return 0;
|
||||
|
||||
error_out:
|
||||
free(page_array);
|
||||
+ if ( elf_check_broken(&elf) )
|
||||
+ ERROR("HVM ELF broken, failing: %s", elf_check_broken(&elf));
|
||||
return -1;
|
||||
}
|
||||
|
||||
diff --git a/tools/xcutils/readnotes.c b/tools/xcutils/readnotes.c
|
||||
index cfae994..d1f7a30 100644
|
||||
--- a/tools/xcutils/readnotes.c
|
||||
+++ b/tools/xcutils/readnotes.c
|
||||
@@ -301,6 +301,9 @@ int main(int argc, char **argv)
|
||||
printf("__xen_guest: %s\n",
|
||||
elf_strfmt(&elf, elf_section_start(&elf, shdr)));
|
||||
|
||||
+ if (elf_check_broken(&elf))
|
||||
+ printf("warning: broken ELF: %s\n", elf_check_broken(&elf));
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/xen/arch/arm/kernel.c b/xen/arch/arm/kernel.c
|
||||
index 2d56130..dec0519 100644
|
||||
--- a/xen/arch/arm/kernel.c
|
||||
+++ b/xen/arch/arm/kernel.c
|
||||
@@ -146,6 +146,8 @@ static int kernel_try_elf_prepare(struct kernel_info *info)
|
||||
{
|
||||
int rc;
|
||||
|
||||
+ memset(&info->elf.elf, 0, sizeof(info->elf.elf));
|
||||
+
|
||||
info->kernel_order = get_order_from_bytes(KERNEL_FLASH_SIZE);
|
||||
info->kernel_img = alloc_xenheap_pages(info->kernel_order, 0);
|
||||
if ( info->kernel_img == NULL )
|
||||
@@ -160,7 +162,7 @@ static int kernel_try_elf_prepare(struct kernel_info *info)
|
||||
#endif
|
||||
elf_parse_binary(&info->elf.elf);
|
||||
if ( (rc = elf_xen_parse(&info->elf.elf, &info->elf.parms)) != 0 )
|
||||
- return rc;
|
||||
+ goto err;
|
||||
|
||||
/*
|
||||
* TODO: can the ELF header be used to find the physical address
|
||||
@@ -169,7 +171,18 @@ static int kernel_try_elf_prepare(struct kernel_info *info)
|
||||
info->entry = info->elf.parms.virt_entry;
|
||||
info->load = kernel_elf_load;
|
||||
|
||||
+ if ( elf_check_broken(&info->elf.elf) )
|
||||
+ printk("Xen: warning: ELF kernel broken: %s\n",
|
||||
+ elf_check_broken(&info->elf.elf));
|
||||
+
|
||||
return 0;
|
||||
+
|
||||
+err:
|
||||
+ if ( elf_check_broken(&info->elf.elf) )
|
||||
+ printk("Xen: ELF kernel broken: %s\n",
|
||||
+ elf_check_broken(&info->elf.elf));
|
||||
+
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
int kernel_prepare(struct kernel_info *info)
|
||||
diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c
|
||||
index a655b21..0dbec96 100644
|
||||
--- a/xen/arch/x86/domain_build.c
|
||||
+++ b/xen/arch/x86/domain_build.c
|
||||
@@ -374,7 +374,7 @@ int __init construct_dom0(
|
||||
#endif
|
||||
elf_parse_binary(&elf);
|
||||
if ( (rc = elf_xen_parse(&elf, &parms)) != 0 )
|
||||
- return rc;
|
||||
+ goto out;
|
||||
|
||||
/* compatibility check */
|
||||
compatible = 0;
|
||||
@@ -413,14 +413,16 @@ int __init construct_dom0(
|
||||
if ( !compatible )
|
||||
{
|
||||
printk("Mismatch between Xen and DOM0 kernel\n");
|
||||
- return -EINVAL;
|
||||
+ rc = -EINVAL;
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
if ( parms.elf_notes[XEN_ELFNOTE_SUPPORTED_FEATURES].type != XEN_ENT_NONE &&
|
||||
!test_bit(XENFEAT_dom0, parms.f_supported) )
|
||||
{
|
||||
printk("Kernel does not support Dom0 operation\n");
|
||||
- return -EINVAL;
|
||||
+ rc = -EINVAL;
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
#if defined(__x86_64__)
|
||||
@@ -734,7 +736,8 @@ int __init construct_dom0(
|
||||
(v_end > HYPERVISOR_COMPAT_VIRT_START(d)) )
|
||||
{
|
||||
printk("DOM0 image overlaps with Xen private area.\n");
|
||||
- return -EINVAL;
|
||||
+ rc = -EINVAL;
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
if ( is_pv_32on64_domain(d) )
|
||||
@@ -914,7 +917,7 @@ int __init construct_dom0(
|
||||
if ( rc < 0 )
|
||||
{
|
||||
printk("Failed to load the kernel binary\n");
|
||||
- return rc;
|
||||
+ goto out;
|
||||
}
|
||||
bootstrap_map(NULL);
|
||||
|
||||
@@ -925,7 +928,8 @@ int __init construct_dom0(
|
||||
{
|
||||
write_ptbase(current);
|
||||
printk("Invalid HYPERCALL_PAGE field in ELF notes.\n");
|
||||
- return -1;
|
||||
+ rc = -1;
|
||||
+ goto out;
|
||||
}
|
||||
hypercall_page_initialise(
|
||||
d, (void *)(unsigned long)parms.virt_hypercall);
|
||||
@@ -1272,9 +1276,19 @@ int __init construct_dom0(
|
||||
|
||||
BUG_ON(rc != 0);
|
||||
|
||||
- iommu_dom0_init(dom0);
|
||||
+ if ( elf_check_broken(&elf) )
|
||||
+ printk(" Xen warning: dom0 kernel broken ELF: %s\n",
|
||||
+ elf_check_broken(&elf));
|
||||
|
||||
+ iommu_dom0_init(dom0);
|
||||
return 0;
|
||||
+
|
||||
+out:
|
||||
+ if ( elf_check_broken(&elf) )
|
||||
+ printk(" Xen dom0 kernel broken ELF: %s\n",
|
||||
+ elf_check_broken(&elf));
|
||||
+
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
--
|
||||
1.7.2.5
|
||||
|
||||
|
|
@ -1,252 +0,0 @@
|
|||
From 3fb6ccf2faccaf5e22e33a3155ccc72d732896d8 Mon Sep 17 00:00:00 2001
|
||||
From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Date: Fri, 14 Jun 2013 16:43:18 +0100
|
||||
Subject: [PATCH 14/23] libelf: use C99 bool for booleans
|
||||
|
||||
We want to remove uses of "int" because signed integers have
|
||||
undesirable undefined behaviours on overflow. Malicious compilers can
|
||||
turn apparently-correct code into code with security vulnerabilities
|
||||
etc.
|
||||
|
||||
In this patch we change all the booleans in libelf to C99 bool,
|
||||
from <stdbool.h>.
|
||||
|
||||
For the one visible libelf boolean in libxc's public interface we
|
||||
retain the use of int to avoid changing the ABI; libxc converts it to
|
||||
a bool for consumption by libelf.
|
||||
|
||||
It is OK to change all values only ever used as booleans to _Bool
|
||||
(bool) because conversion from any scalar type to a _Bool works the
|
||||
same as the boolean test in if() or ?: and is always defined (C99
|
||||
6.3.1.2). But we do need to check that all these variables really are
|
||||
only ever used that way. (It is theoretically possible that the old
|
||||
code truncated some 64-bit values to 32-bit ints which might become
|
||||
zero depending on the value, which would mean a behavioural change in
|
||||
this patch, but it seems implausible that treating 0x????????00000000
|
||||
as false could have been intended.)
|
||||
|
||||
This is part of the fix to a security issue, XSA-55.
|
||||
|
||||
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Acked-by: George Dunlap <george.dunlap@eu.citrix.com>
|
||||
---
|
||||
tools/libxc/xc_dom_elfloader.c | 8 ++++----
|
||||
xen/common/libelf/libelf-dominfo.c | 2 +-
|
||||
xen/common/libelf/libelf-loader.c | 4 ++--
|
||||
xen/common/libelf/libelf-private.h | 2 +-
|
||||
xen/common/libelf/libelf-tools.c | 10 +++++-----
|
||||
xen/include/xen/libelf.h | 18 ++++++++++--------
|
||||
6 files changed, 23 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c
|
||||
index 4fb4da2..9ba64ae 100644
|
||||
--- a/tools/libxc/xc_dom_elfloader.c
|
||||
+++ b/tools/libxc/xc_dom_elfloader.c
|
||||
@@ -34,7 +34,7 @@
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
static void log_callback(struct elf_binary *elf, void *caller_data,
|
||||
- int iserr, const char *fmt, va_list al) {
|
||||
+ bool iserr, const char *fmt, va_list al) {
|
||||
xc_interface *xch = caller_data;
|
||||
|
||||
xc_reportv(xch,
|
||||
@@ -46,7 +46,7 @@ static void log_callback(struct elf_binary *elf, void *caller_data,
|
||||
|
||||
void xc_elf_set_logfile(xc_interface *xch, struct elf_binary *elf,
|
||||
int verbose) {
|
||||
- elf_set_log(elf, log_callback, xch, verbose);
|
||||
+ elf_set_log(elf, log_callback, xch, verbose /* convert to bool */);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
@@ -84,7 +84,7 @@ static char *xc_dom_guest_type(struct xc_dom_image *dom,
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* parse elf binary */
|
||||
|
||||
-static int check_elf_kernel(struct xc_dom_image *dom, int verbose)
|
||||
+static int check_elf_kernel(struct xc_dom_image *dom, bool verbose)
|
||||
{
|
||||
if ( dom->kernel_blob == NULL )
|
||||
{
|
||||
@@ -112,7 +112,7 @@ static int xc_dom_probe_elf_kernel(struct xc_dom_image *dom)
|
||||
}
|
||||
|
||||
static int xc_dom_load_elf_symtab(struct xc_dom_image *dom,
|
||||
- struct elf_binary *elf, int load)
|
||||
+ struct elf_binary *elf, bool load)
|
||||
{
|
||||
struct elf_binary syms;
|
||||
ELF_HANDLE_DECL_NONCONST(elf_shdr) shdr; ELF_HANDLE_DECL(elf_shdr) shdr2;
|
||||
diff --git a/xen/common/libelf/libelf-dominfo.c b/xen/common/libelf/libelf-dominfo.c
|
||||
index 98c80dc..12b6c2a 100644
|
||||
--- a/xen/common/libelf/libelf-dominfo.c
|
||||
+++ b/xen/common/libelf/libelf-dominfo.c
|
||||
@@ -101,7 +101,7 @@ int elf_xen_parse_note(struct elf_binary *elf,
|
||||
/* *INDENT-OFF* */
|
||||
static const struct {
|
||||
char *name;
|
||||
- int str;
|
||||
+ bool str;
|
||||
} note_desc[] = {
|
||||
[XEN_ELFNOTE_ENTRY] = { "ENTRY", 0},
|
||||
[XEN_ELFNOTE_HYPERCALL_PAGE] = { "HYPERCALL_PAGE", 0},
|
||||
diff --git a/xen/common/libelf/libelf-loader.c b/xen/common/libelf/libelf-loader.c
|
||||
index f8be635..0dccd4d 100644
|
||||
--- a/xen/common/libelf/libelf-loader.c
|
||||
+++ b/xen/common/libelf/libelf-loader.c
|
||||
@@ -92,7 +92,7 @@ int elf_init(struct elf_binary *elf, const char *image_input, size_t size)
|
||||
}
|
||||
|
||||
#ifndef __XEN__
|
||||
-void elf_call_log_callback(struct elf_binary *elf, int iserr,
|
||||
+void elf_call_log_callback(struct elf_binary *elf, bool iserr,
|
||||
const char *fmt,...) {
|
||||
va_list al;
|
||||
|
||||
@@ -107,7 +107,7 @@ void elf_call_log_callback(struct elf_binary *elf, int iserr,
|
||||
}
|
||||
|
||||
void elf_set_log(struct elf_binary *elf, elf_log_callback *log_callback,
|
||||
- void *log_caller_data, int verbose)
|
||||
+ void *log_caller_data, bool verbose)
|
||||
{
|
||||
elf->log_callback = log_callback;
|
||||
elf->log_caller_data = log_caller_data;
|
||||
diff --git a/xen/common/libelf/libelf-private.h b/xen/common/libelf/libelf-private.h
|
||||
index 280dfd1..277be04 100644
|
||||
--- a/xen/common/libelf/libelf-private.h
|
||||
+++ b/xen/common/libelf/libelf-private.h
|
||||
@@ -77,7 +77,7 @@
|
||||
#define elf_err(elf, fmt, args ... ) \
|
||||
elf_call_log_callback(elf, 1, fmt , ## args );
|
||||
|
||||
-void elf_call_log_callback(struct elf_binary*, int iserr, const char *fmt,...);
|
||||
+void elf_call_log_callback(struct elf_binary*, bool iserr, const char *fmt,...);
|
||||
|
||||
#define safe_strcpy(d,s) \
|
||||
do { strncpy((d),(s),sizeof((d))-1); \
|
||||
diff --git a/xen/common/libelf/libelf-tools.c b/xen/common/libelf/libelf-tools.c
|
||||
index 744027e..fa58f76 100644
|
||||
--- a/xen/common/libelf/libelf-tools.c
|
||||
+++ b/xen/common/libelf/libelf-tools.c
|
||||
@@ -31,7 +31,7 @@ const char *elf_check_broken(const struct elf_binary *elf)
|
||||
return elf->broken;
|
||||
}
|
||||
|
||||
-static int elf_ptrval_in_range(elf_ptrval ptrval, uint64_t size,
|
||||
+static bool elf_ptrval_in_range(elf_ptrval ptrval, uint64_t size,
|
||||
const void *region, uint64_t regionsize)
|
||||
/*
|
||||
* Returns true if the putative memory area [ptrval,ptrval+size>
|
||||
@@ -53,7 +53,7 @@ static int elf_ptrval_in_range(elf_ptrval ptrval, uint64_t size,
|
||||
return 1;
|
||||
}
|
||||
|
||||
-int elf_access_ok(struct elf_binary * elf,
|
||||
+bool elf_access_ok(struct elf_binary * elf,
|
||||
uint64_t ptrval, size_t size)
|
||||
{
|
||||
if ( elf_ptrval_in_range(ptrval, size, elf->image_base, elf->size) )
|
||||
@@ -92,7 +92,7 @@ uint64_t elf_access_unsigned(struct elf_binary * elf, elf_ptrval base,
|
||||
uint64_t moreoffset, size_t size)
|
||||
{
|
||||
elf_ptrval ptrval = base + moreoffset;
|
||||
- int need_swap = elf_swap(elf);
|
||||
+ bool need_swap = elf_swap(elf);
|
||||
const uint8_t *u8;
|
||||
const uint16_t *u16;
|
||||
const uint32_t *u32;
|
||||
@@ -332,7 +332,7 @@ ELF_HANDLE_DECL(elf_note) elf_note_next(struct elf_binary *elf, ELF_HANDLE_DECL(
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
-int elf_is_elfbinary(const void *image_start, size_t image_size)
|
||||
+bool elf_is_elfbinary(const void *image_start, size_t image_size)
|
||||
{
|
||||
const Elf32_Ehdr *ehdr = image_start;
|
||||
|
||||
@@ -342,7 +342,7 @@ int elf_is_elfbinary(const void *image_start, size_t image_size)
|
||||
return IS_ELF(*ehdr);
|
||||
}
|
||||
|
||||
-int elf_phdr_is_loadable(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr)
|
||||
+bool elf_phdr_is_loadable(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr)
|
||||
{
|
||||
uint64_t p_type = elf_uval(elf, phdr, p_type);
|
||||
uint64_t p_flags = elf_uval(elf, phdr, p_flags);
|
||||
diff --git a/xen/include/xen/libelf.h b/xen/include/xen/libelf.h
|
||||
index ac93858..951430f 100644
|
||||
--- a/xen/include/xen/libelf.h
|
||||
+++ b/xen/include/xen/libelf.h
|
||||
@@ -29,6 +29,8 @@
|
||||
#error define architectural endianness
|
||||
#endif
|
||||
|
||||
+#include <stdbool.h>
|
||||
+
|
||||
#undef ELFSIZE
|
||||
#include "elfstructs.h"
|
||||
#ifdef __XEN__
|
||||
@@ -42,7 +44,7 @@
|
||||
|
||||
struct elf_binary;
|
||||
typedef void elf_log_callback(struct elf_binary*, void *caller_data,
|
||||
- int iserr, const char *fmt, va_list al);
|
||||
+ bool iserr, const char *fmt, va_list al);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -237,7 +239,7 @@ struct elf_binary {
|
||||
elf_log_callback *log_callback;
|
||||
void *log_caller_data;
|
||||
#endif
|
||||
- int verbose;
|
||||
+ bool verbose;
|
||||
const char *broken;
|
||||
};
|
||||
|
||||
@@ -301,8 +303,8 @@ void elf_memset_safe(struct elf_binary*, elf_ptrval dst, int c, size_t);
|
||||
* outside permitted areas.
|
||||
*/
|
||||
|
||||
-int elf_access_ok(struct elf_binary * elf,
|
||||
- uint64_t ptrval, size_t size);
|
||||
+bool elf_access_ok(struct elf_binary * elf,
|
||||
+ uint64_t ptrval, size_t size);
|
||||
|
||||
#define elf_store_val(elf, type, ptr, val) \
|
||||
({ \
|
||||
@@ -351,9 +353,9 @@ uint64_t elf_note_numeric_array(struct elf_binary *, ELF_HANDLE_DECL(elf_note),
|
||||
ELF_HANDLE_DECL(elf_note) elf_note_next(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note);
|
||||
|
||||
/* (Only) checks that the image has the right magic number. */
|
||||
-int elf_is_elfbinary(const void *image_start, size_t image_size);
|
||||
+bool elf_is_elfbinary(const void *image_start, size_t image_size);
|
||||
|
||||
-int elf_phdr_is_loadable(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr);
|
||||
+bool elf_phdr_is_loadable(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr);
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* xc_libelf_loader.c */
|
||||
@@ -367,7 +369,7 @@ int elf_init(struct elf_binary *elf, const char *image, size_t size);
|
||||
void elf_set_verbose(struct elf_binary *elf);
|
||||
#else
|
||||
void elf_set_log(struct elf_binary *elf, elf_log_callback*,
|
||||
- void *log_caller_pointer, int verbose);
|
||||
+ void *log_caller_pointer, bool verbose);
|
||||
#endif
|
||||
|
||||
void elf_parse_binary(struct elf_binary *elf);
|
||||
@@ -419,7 +421,7 @@ struct elf_dom_parms {
|
||||
char xen_ver[16];
|
||||
char loader[16];
|
||||
int pae;
|
||||
- int bsd_symtab;
|
||||
+ bool bsd_symtab;
|
||||
uint64_t virt_base;
|
||||
uint64_t virt_entry;
|
||||
uint64_t virt_hypercall;
|
||||
--
|
||||
1.7.2.5
|
||||
|
|
@ -1,409 +0,0 @@
|
|||
From 52d8cc2dd3bb3e0f6d51e00280da934e8d91653a Mon Sep 17 00:00:00 2001
|
||||
From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Date: Fri, 14 Jun 2013 16:43:18 +0100
|
||||
Subject: [PATCH 16/23] libelf: check loops for running away
|
||||
|
||||
Ensure that libelf does not have any loops which can run away
|
||||
indefinitely even if the input is bogus. (Grepped for \bfor, \bwhile
|
||||
and \bgoto in libelf and xc_dom_*loader*.c.)
|
||||
|
||||
Changes needed:
|
||||
* elf_note_next uses the note's unchecked alleged length, which might
|
||||
wrap round. If it does, return ELF_MAX_PTRVAL (0xfff..fff) instead,
|
||||
which will be beyond the end of the section and so terminate the
|
||||
caller's loop. Also check that the returned psuedopointer is sane.
|
||||
* In various loops over section and program headers, check that the
|
||||
calculated header pointer is still within the image, and quit the
|
||||
loop if it isn't.
|
||||
* Some fixed limits to avoid potentially O(image_size^2) loops:
|
||||
- maximum length of strings: 4K (longer ones ignored totally)
|
||||
- maximum total number of ELF notes: 65536 (any more are ignored)
|
||||
* Check that the total program contents (text, data) we copy or
|
||||
initialise doesn't exceed twice the output image area size.
|
||||
* Remove an entirely useless loop from elf_xen_parse (!)
|
||||
* Replace a nested search loop in in xc_dom_load_elf_symtab in
|
||||
xc_dom_elfloader.c by a precomputation of a bitmap of referenced
|
||||
symtabs.
|
||||
|
||||
We have not changed loops which might, in principle, iterate over the
|
||||
whole image - even if they might do so one byte at a time with a
|
||||
nontrivial access check function in the middle.
|
||||
|
||||
This is part of the fix to a security issue, XSA-55.
|
||||
|
||||
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
---
|
||||
tools/libxc/xc_dom_elfloader.c | 33 ++++++++++++++++++-------
|
||||
xen/common/libelf/libelf-dominfo.c | 43 ++++++++++++++++++++------------
|
||||
xen/common/libelf/libelf-loader.c | 47 ++++++++++++++++++++++++++++++++++-
|
||||
xen/common/libelf/libelf-tools.c | 28 ++++++++++++++++++++-
|
||||
xen/include/xen/libelf.h | 13 ++++++++++
|
||||
5 files changed, 135 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c
|
||||
index 62a0d3b..c5014d2 100644
|
||||
--- a/tools/libxc/xc_dom_elfloader.c
|
||||
+++ b/tools/libxc/xc_dom_elfloader.c
|
||||
@@ -28,6 +28,7 @@
|
||||
|
||||
#include "xg_private.h"
|
||||
#include "xc_dom.h"
|
||||
+#include "xc_bitops.h"
|
||||
|
||||
#define XEN_VER "xen-3.0"
|
||||
|
||||
@@ -120,6 +121,7 @@ static elf_errorstatus xc_dom_load_elf_symtab(struct xc_dom_image *dom,
|
||||
ELF_PTRVAL_CHAR hdr;
|
||||
size_t size;
|
||||
unsigned h, count, type, i, tables = 0;
|
||||
+ unsigned long *strtab_referenced = NULL;
|
||||
|
||||
if ( elf_swap(elf) )
|
||||
{
|
||||
@@ -220,22 +222,35 @@ static elf_errorstatus xc_dom_load_elf_symtab(struct xc_dom_image *dom,
|
||||
symtab, maxaddr);
|
||||
|
||||
count = elf_shdr_count(&syms);
|
||||
+ /* elf_shdr_count guarantees that count is reasonable */
|
||||
+
|
||||
+ strtab_referenced = xc_dom_malloc(dom, bitmap_size(count));
|
||||
+ if ( strtab_referenced == NULL )
|
||||
+ return -1;
|
||||
+ bitmap_clear(strtab_referenced, count);
|
||||
+ /* Note the symtabs @h linked to by any strtab @i. */
|
||||
+ for ( i = 0; i < count; i++ )
|
||||
+ {
|
||||
+ shdr2 = elf_shdr_by_index(&syms, i);
|
||||
+ if ( elf_uval(&syms, shdr2, sh_type) == SHT_SYMTAB )
|
||||
+ {
|
||||
+ h = elf_uval(&syms, shdr2, sh_link);
|
||||
+ if (h < count)
|
||||
+ set_bit(h, strtab_referenced);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
for ( h = 0; h < count; h++ )
|
||||
{
|
||||
shdr = ELF_OBSOLETE_VOIDP_CAST elf_shdr_by_index(&syms, h);
|
||||
+ if ( !elf_access_ok(elf, ELF_HANDLE_PTRVAL(shdr), 1) )
|
||||
+ /* input has an insane section header count field */
|
||||
+ break;
|
||||
type = elf_uval(&syms, shdr, sh_type);
|
||||
if ( type == SHT_STRTAB )
|
||||
{
|
||||
- /* Look for a strtab @i linked to symtab @h. */
|
||||
- for ( i = 0; i < count; i++ )
|
||||
- {
|
||||
- shdr2 = elf_shdr_by_index(&syms, i);
|
||||
- if ( (elf_uval(&syms, shdr2, sh_type) == SHT_SYMTAB) &&
|
||||
- (elf_uval(&syms, shdr2, sh_link) == h) )
|
||||
- break;
|
||||
- }
|
||||
/* Skip symtab @h if we found no corresponding strtab @i. */
|
||||
- if ( i == count )
|
||||
+ if ( !test_bit(h, strtab_referenced) )
|
||||
{
|
||||
if ( elf_64bit(&syms) )
|
||||
elf_store_field(elf, shdr, e64.sh_offset, 0);
|
||||
diff --git a/xen/common/libelf/libelf-dominfo.c b/xen/common/libelf/libelf-dominfo.c
|
||||
index cdd0d31..25a10d7 100644
|
||||
--- a/xen/common/libelf/libelf-dominfo.c
|
||||
+++ b/xen/common/libelf/libelf-dominfo.c
|
||||
@@ -221,7 +221,8 @@ elf_errorstatus elf_xen_parse_note(struct elf_binary *elf,
|
||||
static unsigned elf_xen_parse_notes(struct elf_binary *elf,
|
||||
struct elf_dom_parms *parms,
|
||||
ELF_PTRVAL_CONST_VOID start,
|
||||
- ELF_PTRVAL_CONST_VOID end)
|
||||
+ ELF_PTRVAL_CONST_VOID end,
|
||||
+ unsigned *total_note_count)
|
||||
{
|
||||
unsigned xen_elfnotes = 0;
|
||||
ELF_HANDLE_DECL(elf_note) note;
|
||||
@@ -233,6 +234,12 @@ static unsigned elf_xen_parse_notes(struct elf_binary *elf,
|
||||
ELF_HANDLE_PTRVAL(note) < parms->elf_note_end;
|
||||
note = elf_note_next(elf, note) )
|
||||
{
|
||||
+ if ( *total_note_count >= ELF_MAX_TOTAL_NOTE_COUNT )
|
||||
+ {
|
||||
+ elf_mark_broken(elf, "too many ELF notes");
|
||||
+ break;
|
||||
+ }
|
||||
+ (*total_note_count)++;
|
||||
note_name = elf_note_name(elf, note);
|
||||
if ( note_name == NULL )
|
||||
continue;
|
||||
@@ -473,6 +480,7 @@ elf_errorstatus elf_xen_parse(struct elf_binary *elf,
|
||||
ELF_HANDLE_DECL(elf_phdr) phdr;
|
||||
unsigned xen_elfnotes = 0;
|
||||
unsigned i, count, more_notes;
|
||||
+ unsigned total_note_count = 0;
|
||||
|
||||
elf_memset_unchecked(parms, 0, sizeof(*parms));
|
||||
parms->virt_base = UNSET_ADDR;
|
||||
@@ -487,6 +495,9 @@ elf_errorstatus elf_xen_parse(struct elf_binary *elf,
|
||||
for ( i = 0; i < count; i++ )
|
||||
{
|
||||
phdr = elf_phdr_by_index(elf, i);
|
||||
+ if ( !elf_access_ok(elf, ELF_HANDLE_PTRVAL(phdr), 1) )
|
||||
+ /* input has an insane program header count field */
|
||||
+ break;
|
||||
if ( elf_uval(elf, phdr, p_type) != PT_NOTE )
|
||||
continue;
|
||||
|
||||
@@ -499,7 +510,8 @@ elf_errorstatus elf_xen_parse(struct elf_binary *elf,
|
||||
|
||||
more_notes = elf_xen_parse_notes(elf, parms,
|
||||
elf_segment_start(elf, phdr),
|
||||
- elf_segment_end(elf, phdr));
|
||||
+ elf_segment_end(elf, phdr),
|
||||
+ &total_note_count);
|
||||
if ( more_notes == ELF_NOTE_INVALID )
|
||||
return -1;
|
||||
|
||||
@@ -516,13 +528,17 @@ elf_errorstatus elf_xen_parse(struct elf_binary *elf,
|
||||
for ( i = 0; i < count; i++ )
|
||||
{
|
||||
shdr = elf_shdr_by_index(elf, i);
|
||||
+ if ( !elf_access_ok(elf, ELF_HANDLE_PTRVAL(shdr), 1) )
|
||||
+ /* input has an insane section header count field */
|
||||
+ break;
|
||||
|
||||
if ( elf_uval(elf, shdr, sh_type) != SHT_NOTE )
|
||||
continue;
|
||||
|
||||
more_notes = elf_xen_parse_notes(elf, parms,
|
||||
elf_section_start(elf, shdr),
|
||||
- elf_section_end(elf, shdr));
|
||||
+ elf_section_end(elf, shdr),
|
||||
+ &total_note_count);
|
||||
|
||||
if ( more_notes == ELF_NOTE_INVALID )
|
||||
return -1;
|
||||
@@ -540,20 +556,15 @@ elf_errorstatus elf_xen_parse(struct elf_binary *elf,
|
||||
*/
|
||||
if ( xen_elfnotes == 0 )
|
||||
{
|
||||
- count = elf_shdr_count(elf);
|
||||
- for ( i = 0; i < count; i++ )
|
||||
+ shdr = elf_shdr_by_name(elf, "__xen_guest");
|
||||
+ if ( ELF_HANDLE_VALID(shdr) )
|
||||
{
|
||||
- shdr = elf_shdr_by_name(elf, "__xen_guest");
|
||||
- if ( ELF_HANDLE_VALID(shdr) )
|
||||
- {
|
||||
- parms->guest_info = elf_section_start(elf, shdr);
|
||||
- parms->elf_note_start = ELF_INVALID_PTRVAL;
|
||||
- parms->elf_note_end = ELF_INVALID_PTRVAL;
|
||||
- elf_msg(elf, "%s: __xen_guest: \"%s\"\n", __FUNCTION__,
|
||||
- elf_strfmt(elf, parms->guest_info));
|
||||
- elf_xen_parse_guest_info(elf, parms);
|
||||
- break;
|
||||
- }
|
||||
+ parms->guest_info = elf_section_start(elf, shdr);
|
||||
+ parms->elf_note_start = ELF_INVALID_PTRVAL;
|
||||
+ parms->elf_note_end = ELF_INVALID_PTRVAL;
|
||||
+ elf_msg(elf, "%s: __xen_guest: \"%s\"\n", __FUNCTION__,
|
||||
+ elf_strfmt(elf, parms->guest_info));
|
||||
+ elf_xen_parse_guest_info(elf, parms);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/xen/common/libelf/libelf-loader.c b/xen/common/libelf/libelf-loader.c
|
||||
index c3a9e51..06799af 100644
|
||||
--- a/xen/common/libelf/libelf-loader.c
|
||||
+++ b/xen/common/libelf/libelf-loader.c
|
||||
@@ -75,6 +75,9 @@ elf_errorstatus elf_init(struct elf_binary *elf, const char *image_input, size_t
|
||||
for ( i = 0; i < count; i++ )
|
||||
{
|
||||
shdr = elf_shdr_by_index(elf, i);
|
||||
+ if ( !elf_access_ok(elf, ELF_HANDLE_PTRVAL(shdr), 1) )
|
||||
+ /* input has an insane section header count field */
|
||||
+ break;
|
||||
if ( elf_uval(elf, shdr, sh_type) != SHT_SYMTAB )
|
||||
continue;
|
||||
elf->sym_tab = shdr;
|
||||
@@ -170,6 +173,9 @@ void elf_parse_bsdsyms(struct elf_binary *elf, uint64_t pstart)
|
||||
for ( i = 0; i < elf_shdr_count(elf); i++ )
|
||||
{
|
||||
shdr = elf_shdr_by_index(elf, i);
|
||||
+ if ( !elf_access_ok(elf, ELF_HANDLE_PTRVAL(shdr), 1) )
|
||||
+ /* input has an insane section header count field */
|
||||
+ break;
|
||||
type = elf_uval(elf, shdr, sh_type);
|
||||
if ( (type == SHT_STRTAB) || (type == SHT_SYMTAB) )
|
||||
sz = elf_round_up(elf, sz + elf_uval(elf, shdr, sh_size));
|
||||
@@ -224,6 +230,9 @@ do { \
|
||||
|
||||
for ( i = 0; i < elf_shdr_count(elf); i++ )
|
||||
{
|
||||
+ elf_ptrval old_shdr_p;
|
||||
+ elf_ptrval new_shdr_p;
|
||||
+
|
||||
type = elf_uval(elf, shdr, sh_type);
|
||||
if ( (type == SHT_STRTAB) || (type == SHT_SYMTAB) )
|
||||
{
|
||||
@@ -235,8 +244,16 @@ do { \
|
||||
elf_hdr_elm(elf, shdr, sh_offset, maxva - symtab_addr);
|
||||
maxva = ELF_OBSOLETE_VOIDP_CAST elf_round_up(elf, (unsigned long)maxva + sz);
|
||||
}
|
||||
- shdr = ELF_MAKE_HANDLE(elf_shdr, ELF_HANDLE_PTRVAL(shdr) +
|
||||
- (unsigned long)elf_uval(elf, elf->ehdr, e_shentsize));
|
||||
+ old_shdr_p = ELF_HANDLE_PTRVAL(shdr);
|
||||
+ new_shdr_p = old_shdr_p + elf_uval(elf, elf->ehdr, e_shentsize);
|
||||
+ if ( new_shdr_p <= old_shdr_p ) /* wrapped or stuck */
|
||||
+ {
|
||||
+ elf_mark_broken(elf, "bad section header length");
|
||||
+ break;
|
||||
+ }
|
||||
+ if ( !elf_access_ok(elf, new_shdr_p, 1) ) /* outside image */
|
||||
+ break;
|
||||
+ shdr = ELF_MAKE_HANDLE(elf_shdr, new_shdr_p);
|
||||
}
|
||||
|
||||
/* Write down the actual sym size. */
|
||||
@@ -256,6 +273,9 @@ void elf_parse_binary(struct elf_binary *elf)
|
||||
for ( i = 0; i < count; i++ )
|
||||
{
|
||||
phdr = elf_phdr_by_index(elf, i);
|
||||
+ if ( !elf_access_ok(elf, ELF_HANDLE_PTRVAL(phdr), 1) )
|
||||
+ /* input has an insane program header count field */
|
||||
+ break;
|
||||
if ( !elf_phdr_is_loadable(elf, phdr) )
|
||||
continue;
|
||||
paddr = elf_uval(elf, phdr, p_paddr);
|
||||
@@ -278,11 +298,20 @@ elf_errorstatus elf_load_binary(struct elf_binary *elf)
|
||||
ELF_HANDLE_DECL(elf_phdr) phdr;
|
||||
uint64_t i, count, paddr, offset, filesz, memsz;
|
||||
ELF_PTRVAL_VOID dest;
|
||||
+ /*
|
||||
+ * Let bizarre ELFs write the output image up to twice; this
|
||||
+ * calculation is just to ensure our copying loop is no worse than
|
||||
+ * O(domain_size).
|
||||
+ */
|
||||
+ uint64_t remain_allow_copy = (uint64_t)elf->dest_size * 2;
|
||||
|
||||
count = elf_uval(elf, elf->ehdr, e_phnum);
|
||||
for ( i = 0; i < count; i++ )
|
||||
{
|
||||
phdr = elf_phdr_by_index(elf, i);
|
||||
+ if ( !elf_access_ok(elf, ELF_HANDLE_PTRVAL(phdr), 1) )
|
||||
+ /* input has an insane program header count field */
|
||||
+ break;
|
||||
if ( !elf_phdr_is_loadable(elf, phdr) )
|
||||
continue;
|
||||
paddr = elf_uval(elf, phdr, p_paddr);
|
||||
@@ -290,6 +319,20 @@ elf_errorstatus elf_load_binary(struct elf_binary *elf)
|
||||
filesz = elf_uval(elf, phdr, p_filesz);
|
||||
memsz = elf_uval(elf, phdr, p_memsz);
|
||||
dest = elf_get_ptr(elf, paddr);
|
||||
+
|
||||
+ /*
|
||||
+ * We need to check that the input image doesn't have us copy
|
||||
+ * the whole image zillions of times, as that could lead to
|
||||
+ * O(n^2) time behaviour and possible DoS by a malicous ELF.
|
||||
+ */
|
||||
+ if ( remain_allow_copy < memsz )
|
||||
+ {
|
||||
+ elf_mark_broken(elf, "program segments total to more"
|
||||
+ " than the input image size");
|
||||
+ break;
|
||||
+ }
|
||||
+ remain_allow_copy -= memsz;
|
||||
+
|
||||
elf_msg(elf, "%s: phdr %" PRIu64 " at 0x%"ELF_PRPTRVAL" -> 0x%"ELF_PRPTRVAL"\n",
|
||||
__func__, i, dest, (ELF_PTRVAL_VOID)(dest + filesz));
|
||||
if ( elf_load_image(elf, dest, ELF_IMAGE_BASE(elf) + offset, filesz, memsz) != 0 )
|
||||
diff --git a/xen/common/libelf/libelf-tools.c b/xen/common/libelf/libelf-tools.c
|
||||
index 46d4ab1..4a83133 100644
|
||||
--- a/xen/common/libelf/libelf-tools.c
|
||||
+++ b/xen/common/libelf/libelf-tools.c
|
||||
@@ -131,7 +131,16 @@ uint64_t elf_round_up(struct elf_binary *elf, uint64_t addr)
|
||||
|
||||
unsigned elf_shdr_count(struct elf_binary *elf)
|
||||
{
|
||||
- return elf_uval(elf, elf->ehdr, e_shnum);
|
||||
+ unsigned count = elf_uval(elf, elf->ehdr, e_shnum);
|
||||
+ uint64_t max = elf->size / sizeof(Elf32_Shdr);
|
||||
+ if (max > ~(unsigned)0)
|
||||
+ max = ~(unsigned)0; /* Xen doesn't have limits.h :-/ */
|
||||
+ if (count > max)
|
||||
+ {
|
||||
+ elf_mark_broken(elf, "far too many section headers");
|
||||
+ count = max;
|
||||
+ }
|
||||
+ return count;
|
||||
}
|
||||
|
||||
unsigned elf_phdr_count(struct elf_binary *elf)
|
||||
@@ -149,6 +158,9 @@ ELF_HANDLE_DECL(elf_shdr) elf_shdr_by_name(struct elf_binary *elf, const char *n
|
||||
for ( i = 0; i < count; i++ )
|
||||
{
|
||||
shdr = elf_shdr_by_index(elf, i);
|
||||
+ if ( !elf_access_ok(elf, ELF_HANDLE_PTRVAL(shdr), 1) )
|
||||
+ /* input has an insane section header count field */
|
||||
+ break;
|
||||
sname = elf_section_name(elf, shdr);
|
||||
if ( sname && !strcmp(sname, name) )
|
||||
return shdr;
|
||||
@@ -204,6 +216,11 @@ const char *elf_strval(struct elf_binary *elf, elf_ptrval start)
|
||||
if ( !elf_access_unsigned(elf, start, length, 1) )
|
||||
/* ok */
|
||||
return ELF_UNSAFE_PTR(start);
|
||||
+ if ( length >= ELF_MAX_STRING_LENGTH )
|
||||
+ {
|
||||
+ elf_mark_broken(elf, "excessively long string");
|
||||
+ return NULL;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -327,7 +344,14 @@ ELF_HANDLE_DECL(elf_note) elf_note_next(struct elf_binary *elf, ELF_HANDLE_DECL(
|
||||
unsigned namesz = (elf_uval(elf, note, namesz) + 3) & ~3;
|
||||
unsigned descsz = (elf_uval(elf, note, descsz) + 3) & ~3;
|
||||
|
||||
- return ELF_MAKE_HANDLE(elf_note, ELF_HANDLE_PTRVAL(note) + elf_size(elf, note) + namesz + descsz);
|
||||
+ elf_ptrval ptrval = ELF_HANDLE_PTRVAL(note)
|
||||
+ + elf_size(elf, note) + namesz + descsz;
|
||||
+
|
||||
+ if ( ( ptrval <= ELF_HANDLE_PTRVAL(note) || /* wrapped or stuck */
|
||||
+ !elf_access_ok(elf, ELF_HANDLE_PTRVAL(note), 1) ) )
|
||||
+ ptrval = ELF_MAX_PTRVAL; /* terminate caller's loop */
|
||||
+
|
||||
+ return ELF_MAKE_HANDLE(elf_note, ptrval);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
diff --git a/xen/include/xen/libelf.h b/xen/include/xen/libelf.h
|
||||
index 87e126a..f95fe88 100644
|
||||
--- a/xen/include/xen/libelf.h
|
||||
+++ b/xen/include/xen/libelf.h
|
||||
@@ -51,6 +51,9 @@ typedef void elf_log_callback(struct elf_binary*, void *caller_data,
|
||||
|
||||
#endif
|
||||
|
||||
+#define ELF_MAX_STRING_LENGTH 4096
|
||||
+#define ELF_MAX_TOTAL_NOTE_COUNT 65536
|
||||
+
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
/* Macros for accessing the input image and output area. */
|
||||
@@ -353,6 +356,16 @@ ELF_PTRVAL_CONST_VOID elf_note_desc(struct elf_binary *elf, ELF_HANDLE_DECL(elf_
|
||||
uint64_t elf_note_numeric(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note);
|
||||
uint64_t elf_note_numeric_array(struct elf_binary *, ELF_HANDLE_DECL(elf_note),
|
||||
unsigned int unitsz, unsigned int idx);
|
||||
+
|
||||
+/*
|
||||
+ * If you use elf_note_next in a loop, you must put a nontrivial upper
|
||||
+ * bound on the returned value as part of your loop condition. In
|
||||
+ * some cases elf_note_next will substitute ELF_PTRVAL_MAX as return
|
||||
+ * value to indicate that the iteration isn't going well (for example,
|
||||
+ * the putative "next" value would be earlier in memory). In this
|
||||
+ * case the caller's loop must terminate. Checking against the
|
||||
+ * end of the notes segment with a strict inequality is sufficient.
|
||||
+ */
|
||||
ELF_HANDLE_DECL(elf_note) elf_note_next(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note);
|
||||
|
||||
/* (Only) checks that the image has the right magic number. */
|
||||
--
|
||||
1.7.2.5
|
||||
|
|
@ -1,406 +0,0 @@
|
|||
From 3baaa4ffcd3e7dd6227f9bdf817f90e5b75aeda2 Mon Sep 17 00:00:00 2001
|
||||
From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Date: Fri, 14 Jun 2013 16:43:19 +0100
|
||||
Subject: [PATCH 17/23] libelf: abolish obsolete macros
|
||||
|
||||
Abolish ELF_PTRVAL_[CONST_]{CHAR,VOID}; change uses to elf_ptrval.
|
||||
Abolish ELF_HANDLE_DECL_NONCONST; change uses to ELF_HANDLE_DECL.
|
||||
Abolish ELF_OBSOLETE_VOIDP_CAST; simply remove all uses.
|
||||
|
||||
No functional change. (Verified by diffing assembler output.)
|
||||
|
||||
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
|
||||
v2: New patch.
|
||||
---
|
||||
tools/libxc/xc_dom_elfloader.c | 8 +++---
|
||||
tools/xcutils/readnotes.c | 2 +-
|
||||
xen/common/libelf/libelf-dominfo.c | 6 ++--
|
||||
xen/common/libelf/libelf-loader.c | 24 +++++++++---------
|
||||
xen/common/libelf/libelf-tools.c | 24 +++++++++---------
|
||||
xen/include/xen/libelf.h | 48 +++++++++---------------------------
|
||||
6 files changed, 44 insertions(+), 68 deletions(-)
|
||||
|
||||
diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c
|
||||
index c5014d2..9fc4b94 100644
|
||||
--- a/tools/libxc/xc_dom_elfloader.c
|
||||
+++ b/tools/libxc/xc_dom_elfloader.c
|
||||
@@ -116,9 +116,9 @@ static elf_errorstatus xc_dom_load_elf_symtab(struct xc_dom_image *dom,
|
||||
struct elf_binary *elf, bool load)
|
||||
{
|
||||
struct elf_binary syms;
|
||||
- ELF_HANDLE_DECL_NONCONST(elf_shdr) shdr; ELF_HANDLE_DECL(elf_shdr) shdr2;
|
||||
+ ELF_HANDLE_DECL(elf_shdr) shdr; ELF_HANDLE_DECL(elf_shdr) shdr2;
|
||||
xen_vaddr_t symtab, maxaddr;
|
||||
- ELF_PTRVAL_CHAR hdr;
|
||||
+ elf_ptrval hdr;
|
||||
size_t size;
|
||||
unsigned h, count, type, i, tables = 0;
|
||||
unsigned long *strtab_referenced = NULL;
|
||||
@@ -242,7 +242,7 @@ static elf_errorstatus xc_dom_load_elf_symtab(struct xc_dom_image *dom,
|
||||
|
||||
for ( h = 0; h < count; h++ )
|
||||
{
|
||||
- shdr = ELF_OBSOLETE_VOIDP_CAST elf_shdr_by_index(&syms, h);
|
||||
+ shdr = elf_shdr_by_index(&syms, h);
|
||||
if ( !elf_access_ok(elf, ELF_HANDLE_PTRVAL(shdr), 1) )
|
||||
/* input has an insane section header count field */
|
||||
break;
|
||||
@@ -278,7 +278,7 @@ static elf_errorstatus xc_dom_load_elf_symtab(struct xc_dom_image *dom,
|
||||
if ( load )
|
||||
{
|
||||
shdr2 = elf_shdr_by_index(elf, h);
|
||||
- elf_memcpy_safe(elf, ELF_OBSOLETE_VOIDP_CAST elf_section_start(&syms, shdr),
|
||||
+ elf_memcpy_safe(elf, elf_section_start(&syms, shdr),
|
||||
elf_section_start(elf, shdr2),
|
||||
size);
|
||||
}
|
||||
diff --git a/tools/xcutils/readnotes.c b/tools/xcutils/readnotes.c
|
||||
index 2ca7732..5fa445e 100644
|
||||
--- a/tools/xcutils/readnotes.c
|
||||
+++ b/tools/xcutils/readnotes.c
|
||||
@@ -80,7 +80,7 @@ static void print_l1_mfn_valid_note(const char *prefix, struct elf_binary *elf,
|
||||
ELF_HANDLE_DECL(elf_note) note)
|
||||
{
|
||||
unsigned descsz = elf_uval(elf, note, descsz);
|
||||
- ELF_PTRVAL_CONST_VOID desc = elf_note_desc(elf, note);
|
||||
+ elf_ptrval desc = elf_note_desc(elf, note);
|
||||
|
||||
/* XXX should be able to cope with a list of values. */
|
||||
switch ( descsz / 2 )
|
||||
diff --git a/xen/common/libelf/libelf-dominfo.c b/xen/common/libelf/libelf-dominfo.c
|
||||
index 25a10d7..412ea70 100644
|
||||
--- a/xen/common/libelf/libelf-dominfo.c
|
||||
+++ b/xen/common/libelf/libelf-dominfo.c
|
||||
@@ -220,8 +220,8 @@ elf_errorstatus elf_xen_parse_note(struct elf_binary *elf,
|
||||
|
||||
static unsigned elf_xen_parse_notes(struct elf_binary *elf,
|
||||
struct elf_dom_parms *parms,
|
||||
- ELF_PTRVAL_CONST_VOID start,
|
||||
- ELF_PTRVAL_CONST_VOID end,
|
||||
+ elf_ptrval start,
|
||||
+ elf_ptrval end,
|
||||
unsigned *total_note_count)
|
||||
{
|
||||
unsigned xen_elfnotes = 0;
|
||||
@@ -258,7 +258,7 @@ static unsigned elf_xen_parse_notes(struct elf_binary *elf,
|
||||
elf_errorstatus elf_xen_parse_guest_info(struct elf_binary *elf,
|
||||
struct elf_dom_parms *parms)
|
||||
{
|
||||
- ELF_PTRVAL_CONST_CHAR h;
|
||||
+ elf_ptrval h;
|
||||
unsigned char name[32], value[128];
|
||||
unsigned len;
|
||||
|
||||
diff --git a/xen/common/libelf/libelf-loader.c b/xen/common/libelf/libelf-loader.c
|
||||
index 06799af..e2e75af 100644
|
||||
--- a/xen/common/libelf/libelf-loader.c
|
||||
+++ b/xen/common/libelf/libelf-loader.c
|
||||
@@ -118,7 +118,7 @@ void elf_set_log(struct elf_binary *elf, elf_log_callback *log_callback,
|
||||
}
|
||||
|
||||
static elf_errorstatus elf_load_image(struct elf_binary *elf,
|
||||
- ELF_PTRVAL_VOID dst, ELF_PTRVAL_CONST_VOID src,
|
||||
+ elf_ptrval dst, elf_ptrval src,
|
||||
uint64_t filesz, uint64_t memsz)
|
||||
{
|
||||
elf_memcpy_safe(elf, dst, src, filesz);
|
||||
@@ -132,7 +132,7 @@ void elf_set_verbose(struct elf_binary *elf)
|
||||
elf->verbose = 1;
|
||||
}
|
||||
|
||||
-static elf_errorstatus elf_load_image(struct elf_binary *elf, ELF_PTRVAL_VOID dst, ELF_PTRVAL_CONST_VOID src, uint64_t filesz, uint64_t memsz)
|
||||
+static elf_errorstatus elf_load_image(struct elf_binary *elf, elf_ptrval dst, elf_ptrval src, uint64_t filesz, uint64_t memsz)
|
||||
{
|
||||
elf_errorstatus rc;
|
||||
if ( filesz > ULONG_MAX || memsz > ULONG_MAX )
|
||||
@@ -187,12 +187,12 @@ void elf_parse_bsdsyms(struct elf_binary *elf, uint64_t pstart)
|
||||
|
||||
static void elf_load_bsdsyms(struct elf_binary *elf)
|
||||
{
|
||||
- ELF_HANDLE_DECL_NONCONST(elf_ehdr) sym_ehdr;
|
||||
+ ELF_HANDLE_DECL(elf_ehdr) sym_ehdr;
|
||||
unsigned long sz;
|
||||
- ELF_PTRVAL_VOID maxva;
|
||||
- ELF_PTRVAL_VOID symbase;
|
||||
- ELF_PTRVAL_VOID symtab_addr;
|
||||
- ELF_HANDLE_DECL_NONCONST(elf_shdr) shdr;
|
||||
+ elf_ptrval maxva;
|
||||
+ elf_ptrval symbase;
|
||||
+ elf_ptrval symtab_addr;
|
||||
+ ELF_HANDLE_DECL(elf_shdr) shdr;
|
||||
unsigned i, type;
|
||||
|
||||
if ( !elf->bsd_symtab_pstart )
|
||||
@@ -226,7 +226,7 @@ do { \
|
||||
elf_memcpy_safe(elf, ELF_HANDLE_PTRVAL(shdr),
|
||||
ELF_IMAGE_BASE(elf) + elf_uval(elf, elf->ehdr, e_shoff),
|
||||
sz);
|
||||
- maxva = ELF_OBSOLETE_VOIDP_CAST elf_round_up(elf, (unsigned long)maxva + sz);
|
||||
+ maxva = elf_round_up(elf, (unsigned long)maxva + sz);
|
||||
|
||||
for ( i = 0; i < elf_shdr_count(elf); i++ )
|
||||
{
|
||||
@@ -242,7 +242,7 @@ do { \
|
||||
elf_memcpy_safe(elf, maxva, elf_section_start(elf, shdr), sz);
|
||||
/* Mangled to be based on ELF header location. */
|
||||
elf_hdr_elm(elf, shdr, sh_offset, maxva - symtab_addr);
|
||||
- maxva = ELF_OBSOLETE_VOIDP_CAST elf_round_up(elf, (unsigned long)maxva + sz);
|
||||
+ maxva = elf_round_up(elf, (unsigned long)maxva + sz);
|
||||
}
|
||||
old_shdr_p = ELF_HANDLE_PTRVAL(shdr);
|
||||
new_shdr_p = old_shdr_p + elf_uval(elf, elf->ehdr, e_shentsize);
|
||||
@@ -297,7 +297,7 @@ elf_errorstatus elf_load_binary(struct elf_binary *elf)
|
||||
{
|
||||
ELF_HANDLE_DECL(elf_phdr) phdr;
|
||||
uint64_t i, count, paddr, offset, filesz, memsz;
|
||||
- ELF_PTRVAL_VOID dest;
|
||||
+ elf_ptrval dest;
|
||||
/*
|
||||
* Let bizarre ELFs write the output image up to twice; this
|
||||
* calculation is just to ensure our copying loop is no worse than
|
||||
@@ -334,7 +334,7 @@ elf_errorstatus elf_load_binary(struct elf_binary *elf)
|
||||
remain_allow_copy -= memsz;
|
||||
|
||||
elf_msg(elf, "%s: phdr %" PRIu64 " at 0x%"ELF_PRPTRVAL" -> 0x%"ELF_PRPTRVAL"\n",
|
||||
- __func__, i, dest, (ELF_PTRVAL_VOID)(dest + filesz));
|
||||
+ __func__, i, dest, (elf_ptrval)(dest + filesz));
|
||||
if ( elf_load_image(elf, dest, ELF_IMAGE_BASE(elf) + offset, filesz, memsz) != 0 )
|
||||
return -1;
|
||||
}
|
||||
@@ -343,7 +343,7 @@ elf_errorstatus elf_load_binary(struct elf_binary *elf)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-ELF_PTRVAL_VOID elf_get_ptr(struct elf_binary *elf, unsigned long addr)
|
||||
+elf_ptrval elf_get_ptr(struct elf_binary *elf, unsigned long addr)
|
||||
{
|
||||
return ELF_REALPTR2PTRVAL(elf->dest_base) + addr - elf->pstart;
|
||||
}
|
||||
diff --git a/xen/common/libelf/libelf-tools.c b/xen/common/libelf/libelf-tools.c
|
||||
index 4a83133..e202249 100644
|
||||
--- a/xen/common/libelf/libelf-tools.c
|
||||
+++ b/xen/common/libelf/libelf-tools.c
|
||||
@@ -171,7 +171,7 @@ ELF_HANDLE_DECL(elf_shdr) elf_shdr_by_name(struct elf_binary *elf, const char *n
|
||||
ELF_HANDLE_DECL(elf_shdr) elf_shdr_by_index(struct elf_binary *elf, unsigned index)
|
||||
{
|
||||
uint64_t count = elf_shdr_count(elf);
|
||||
- ELF_PTRVAL_CONST_VOID ptr;
|
||||
+ elf_ptrval ptr;
|
||||
|
||||
if ( index >= count )
|
||||
return ELF_INVALID_HANDLE(elf_shdr);
|
||||
@@ -185,7 +185,7 @@ ELF_HANDLE_DECL(elf_shdr) elf_shdr_by_index(struct elf_binary *elf, unsigned ind
|
||||
ELF_HANDLE_DECL(elf_phdr) elf_phdr_by_index(struct elf_binary *elf, unsigned index)
|
||||
{
|
||||
uint64_t count = elf_uval(elf, elf->ehdr, e_phnum);
|
||||
- ELF_PTRVAL_CONST_VOID ptr;
|
||||
+ elf_ptrval ptr;
|
||||
|
||||
if ( index >= count )
|
||||
return ELF_INVALID_HANDLE(elf_phdr);
|
||||
@@ -233,24 +233,24 @@ const char *elf_strfmt(struct elf_binary *elf, elf_ptrval start)
|
||||
return str;
|
||||
}
|
||||
|
||||
-ELF_PTRVAL_CONST_VOID elf_section_start(struct elf_binary *elf, ELF_HANDLE_DECL(elf_shdr) shdr)
|
||||
+elf_ptrval elf_section_start(struct elf_binary *elf, ELF_HANDLE_DECL(elf_shdr) shdr)
|
||||
{
|
||||
return ELF_IMAGE_BASE(elf) + elf_uval(elf, shdr, sh_offset);
|
||||
}
|
||||
|
||||
-ELF_PTRVAL_CONST_VOID elf_section_end(struct elf_binary *elf, ELF_HANDLE_DECL(elf_shdr) shdr)
|
||||
+elf_ptrval elf_section_end(struct elf_binary *elf, ELF_HANDLE_DECL(elf_shdr) shdr)
|
||||
{
|
||||
return ELF_IMAGE_BASE(elf)
|
||||
+ elf_uval(elf, shdr, sh_offset) + elf_uval(elf, shdr, sh_size);
|
||||
}
|
||||
|
||||
-ELF_PTRVAL_CONST_VOID elf_segment_start(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr)
|
||||
+elf_ptrval elf_segment_start(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr)
|
||||
{
|
||||
return ELF_IMAGE_BASE(elf)
|
||||
+ elf_uval(elf, phdr, p_offset);
|
||||
}
|
||||
|
||||
-ELF_PTRVAL_CONST_VOID elf_segment_end(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr)
|
||||
+elf_ptrval elf_segment_end(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr)
|
||||
{
|
||||
return ELF_IMAGE_BASE(elf)
|
||||
+ elf_uval(elf, phdr, p_offset) + elf_uval(elf, phdr, p_filesz);
|
||||
@@ -258,8 +258,8 @@ ELF_PTRVAL_CONST_VOID elf_segment_end(struct elf_binary *elf, ELF_HANDLE_DECL(el
|
||||
|
||||
ELF_HANDLE_DECL(elf_sym) elf_sym_by_name(struct elf_binary *elf, const char *symbol)
|
||||
{
|
||||
- ELF_PTRVAL_CONST_VOID ptr = elf_section_start(elf, elf->sym_tab);
|
||||
- ELF_PTRVAL_CONST_VOID end = elf_section_end(elf, elf->sym_tab);
|
||||
+ elf_ptrval ptr = elf_section_start(elf, elf->sym_tab);
|
||||
+ elf_ptrval end = elf_section_end(elf, elf->sym_tab);
|
||||
ELF_HANDLE_DECL(elf_sym) sym;
|
||||
uint64_t info, name;
|
||||
const char *sym_name;
|
||||
@@ -283,7 +283,7 @@ ELF_HANDLE_DECL(elf_sym) elf_sym_by_name(struct elf_binary *elf, const char *sym
|
||||
|
||||
ELF_HANDLE_DECL(elf_sym) elf_sym_by_index(struct elf_binary *elf, unsigned index)
|
||||
{
|
||||
- ELF_PTRVAL_CONST_VOID ptr = elf_section_start(elf, elf->sym_tab);
|
||||
+ elf_ptrval ptr = elf_section_start(elf, elf->sym_tab);
|
||||
ELF_HANDLE_DECL(elf_sym) sym;
|
||||
|
||||
sym = ELF_MAKE_HANDLE(elf_sym, ptr + index * elf_size(elf, sym));
|
||||
@@ -295,7 +295,7 @@ const char *elf_note_name(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note
|
||||
return elf_strval(elf, ELF_HANDLE_PTRVAL(note) + elf_size(elf, note));
|
||||
}
|
||||
|
||||
-ELF_PTRVAL_CONST_VOID elf_note_desc(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note)
|
||||
+elf_ptrval elf_note_desc(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note)
|
||||
{
|
||||
unsigned namesz = (elf_uval(elf, note, namesz) + 3) & ~3;
|
||||
|
||||
@@ -304,7 +304,7 @@ ELF_PTRVAL_CONST_VOID elf_note_desc(struct elf_binary *elf, ELF_HANDLE_DECL(elf_
|
||||
|
||||
uint64_t elf_note_numeric(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note)
|
||||
{
|
||||
- ELF_PTRVAL_CONST_VOID desc = elf_note_desc(elf, note);
|
||||
+ elf_ptrval desc = elf_note_desc(elf, note);
|
||||
unsigned descsz = elf_uval(elf, note, descsz);
|
||||
|
||||
switch (descsz)
|
||||
@@ -322,7 +322,7 @@ uint64_t elf_note_numeric(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note
|
||||
uint64_t elf_note_numeric_array(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note,
|
||||
unsigned int unitsz, unsigned int idx)
|
||||
{
|
||||
- ELF_PTRVAL_CONST_VOID desc = elf_note_desc(elf, note);
|
||||
+ elf_ptrval desc = elf_note_desc(elf, note);
|
||||
unsigned descsz = elf_uval(elf, note, descsz);
|
||||
|
||||
if ( descsz % unitsz || idx >= descsz / unitsz )
|
||||
diff --git a/xen/include/xen/libelf.h b/xen/include/xen/libelf.h
|
||||
index f95fe88..174f8da 100644
|
||||
--- a/xen/include/xen/libelf.h
|
||||
+++ b/xen/include/xen/libelf.h
|
||||
@@ -61,13 +61,8 @@ typedef void elf_log_callback(struct elf_binary*, void *caller_data,
|
||||
/*
|
||||
* We abstract away the pointerness of these pointers, replacing
|
||||
* various void*, char* and struct* with the following:
|
||||
- * PTRVAL A pointer to a byte; one can do pointer arithmetic
|
||||
+ * elf_ptrval A pointer to a byte; one can do pointer arithmetic
|
||||
* on this.
|
||||
- * This replaces variables which were char*,void*
|
||||
- * and their const versions, so we provide four
|
||||
- * different obsolete declaration macros:
|
||||
- * ELF_PTRVAL_{,CONST}{VOID,CHAR}
|
||||
- * New code can simply use the elf_ptrval typedef.
|
||||
* HANDLE A pointer to a struct. There is one of these types
|
||||
* for each pointer type - that is, for each "structname".
|
||||
* In the arguments to the various HANDLE macros, structname
|
||||
@@ -76,8 +71,6 @@ typedef void elf_log_callback(struct elf_binary*, void *caller_data,
|
||||
* pointers. In the current code attempts to do so will
|
||||
* compile, but in the next patch this will become a
|
||||
* compile error.
|
||||
- * We also provide a second declaration macro for
|
||||
- * pointers which were to const; this is obsolete.
|
||||
*/
|
||||
|
||||
typedef uintptr_t elf_ptrval;
|
||||
@@ -85,15 +78,9 @@ typedef uintptr_t elf_ptrval;
|
||||
#define ELF_REALPTR2PTRVAL(realpointer) ((elf_ptrval)(realpointer))
|
||||
/* Converts an actual C pointer into a PTRVAL */
|
||||
|
||||
-#define ELF_HANDLE_DECL_NONCONST(structname) structname##_handle /*obsolete*/
|
||||
#define ELF_HANDLE_DECL(structname) structname##_handle
|
||||
/* Provides a type declaration for a HANDLE. */
|
||||
|
||||
-#define ELF_PTRVAL_VOID elf_ptrval /*obsolete*/
|
||||
-#define ELF_PTRVAL_CHAR elf_ptrval /*obsolete*/
|
||||
-#define ELF_PTRVAL_CONST_VOID elf_ptrval /*obsolete*/
|
||||
-#define ELF_PTRVAL_CONST_CHAR elf_ptrval /*obsolete*/
|
||||
-
|
||||
#ifdef __XEN__
|
||||
# define ELF_PRPTRVAL "lu"
|
||||
/*
|
||||
@@ -124,17 +111,6 @@ typedef uintptr_t elf_ptrval;
|
||||
#define ELF_HANDLE_PTRVAL(handleval) ((handleval).ptrval)
|
||||
/* Converts a HANDLE to a PTRVAL. */
|
||||
|
||||
-#define ELF_OBSOLETE_VOIDP_CAST /*empty*/
|
||||
- /*
|
||||
- * In some places the old code used to need to
|
||||
- * - cast away const (the existing code uses const a fair
|
||||
- * bit but actually sometimes wants to write to its input)
|
||||
- * from a PTRVAL.
|
||||
- * - convert an integer representing a pointer to a PTRVAL
|
||||
- * Nowadays all of these re uintptr_ts so there is no const problem
|
||||
- * and no need for any casting.
|
||||
- */
|
||||
-
|
||||
#define ELF_UNSAFE_PTR(ptrval) ((void*)(elf_ptrval)(ptrval))
|
||||
/*
|
||||
* Turns a PTRVAL into an actual C pointer. Before this is done
|
||||
@@ -212,7 +188,7 @@ struct elf_binary {
|
||||
char data;
|
||||
|
||||
ELF_HANDLE_DECL(elf_ehdr) ehdr;
|
||||
- ELF_PTRVAL_CONST_CHAR sec_strtab;
|
||||
+ elf_ptrval sec_strtab;
|
||||
ELF_HANDLE_DECL(elf_shdr) sym_tab;
|
||||
uint64_t sym_strtab;
|
||||
|
||||
@@ -290,7 +266,7 @@ struct elf_binary {
|
||||
* str should be a HANDLE.
|
||||
*/
|
||||
|
||||
-uint64_t elf_access_unsigned(struct elf_binary *elf, ELF_PTRVAL_CONST_VOID ptr,
|
||||
+uint64_t elf_access_unsigned(struct elf_binary *elf, elf_ptrval ptr,
|
||||
uint64_t offset, size_t size);
|
||||
/* Reads a field at arbitrary offset and alignemnt */
|
||||
|
||||
@@ -342,17 +318,17 @@ ELF_HANDLE_DECL(elf_shdr) elf_shdr_by_index(struct elf_binary *elf, unsigned ind
|
||||
ELF_HANDLE_DECL(elf_phdr) elf_phdr_by_index(struct elf_binary *elf, unsigned index);
|
||||
|
||||
const char *elf_section_name(struct elf_binary *elf, ELF_HANDLE_DECL(elf_shdr) shdr); /* might return NULL if inputs are invalid */
|
||||
-ELF_PTRVAL_CONST_VOID elf_section_start(struct elf_binary *elf, ELF_HANDLE_DECL(elf_shdr) shdr);
|
||||
-ELF_PTRVAL_CONST_VOID elf_section_end(struct elf_binary *elf, ELF_HANDLE_DECL(elf_shdr) shdr);
|
||||
+elf_ptrval elf_section_start(struct elf_binary *elf, ELF_HANDLE_DECL(elf_shdr) shdr);
|
||||
+elf_ptrval elf_section_end(struct elf_binary *elf, ELF_HANDLE_DECL(elf_shdr) shdr);
|
||||
|
||||
-ELF_PTRVAL_CONST_VOID elf_segment_start(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr);
|
||||
-ELF_PTRVAL_CONST_VOID elf_segment_end(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr);
|
||||
+elf_ptrval elf_segment_start(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr);
|
||||
+elf_ptrval elf_segment_end(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr);
|
||||
|
||||
ELF_HANDLE_DECL(elf_sym) elf_sym_by_name(struct elf_binary *elf, const char *symbol);
|
||||
ELF_HANDLE_DECL(elf_sym) elf_sym_by_index(struct elf_binary *elf, unsigned index);
|
||||
|
||||
const char *elf_note_name(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note); /* may return NULL */
|
||||
-ELF_PTRVAL_CONST_VOID elf_note_desc(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note);
|
||||
+elf_ptrval elf_note_desc(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note);
|
||||
uint64_t elf_note_numeric(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note);
|
||||
uint64_t elf_note_numeric_array(struct elf_binary *, ELF_HANDLE_DECL(elf_note),
|
||||
unsigned int unitsz, unsigned int idx);
|
||||
@@ -391,7 +367,7 @@ void elf_set_log(struct elf_binary *elf, elf_log_callback*,
|
||||
void elf_parse_binary(struct elf_binary *elf);
|
||||
elf_errorstatus elf_load_binary(struct elf_binary *elf);
|
||||
|
||||
-ELF_PTRVAL_VOID elf_get_ptr(struct elf_binary *elf, unsigned long addr);
|
||||
+elf_ptrval elf_get_ptr(struct elf_binary *elf, unsigned long addr);
|
||||
uint64_t elf_lookup_addr(struct elf_binary *elf, const char *symbol);
|
||||
|
||||
void elf_parse_bsdsyms(struct elf_binary *elf, uint64_t pstart); /* private */
|
||||
@@ -426,9 +402,9 @@ struct xen_elfnote {
|
||||
|
||||
struct elf_dom_parms {
|
||||
/* raw */
|
||||
- ELF_PTRVAL_CONST_CHAR guest_info;
|
||||
- ELF_PTRVAL_CONST_VOID elf_note_start;
|
||||
- ELF_PTRVAL_CONST_VOID elf_note_end;
|
||||
+ elf_ptrval guest_info;
|
||||
+ elf_ptrval elf_note_start;
|
||||
+ elf_ptrval elf_note_end;
|
||||
struct xen_elfnote elf_notes[XEN_ELFNOTE_MAX + 1];
|
||||
|
||||
/* parsed */
|
||||
--
|
||||
1.7.2.5
|
||||
|
|
@ -1,450 +0,0 @@
|
|||
From b06e277b1fc08c7da3befeb3ac3950e1d941585d Mon Sep 17 00:00:00 2001
|
||||
From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Date: Fri, 14 Jun 2013 16:43:19 +0100
|
||||
Subject: [PATCH 18/23] libxc: Add range checking to xc_dom_binloader
|
||||
|
||||
This is a simple binary image loader with its own metadata format.
|
||||
However, it is too careless with image-supplied values.
|
||||
|
||||
Add the following checks:
|
||||
|
||||
* That the image is bigger than the metadata table; otherwise the
|
||||
pointer arithmetic to calculate the metadata table location may
|
||||
yield undefined and dangerous values.
|
||||
|
||||
* When clamping the end of the region to search, that we do not
|
||||
calculate pointers beyond the end of the image. The C
|
||||
specification does not permit this and compilers are becoming ever
|
||||
more determined to miscompile code when they can "prove" various
|
||||
falsehoods based on assertions from the C spec.
|
||||
|
||||
* That the supplied image is big enough for the text we are allegedly
|
||||
copying from it. Otherwise we might have a read overrun and copy
|
||||
the results (perhaps a lot of secret data) into the guest.
|
||||
|
||||
This is part of the fix to a security issue, XSA-55.
|
||||
|
||||
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
---
|
||||
tools/libxc/xc_dom_binloader.c | 15 +++++++++++++--
|
||||
1 files changed, 13 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/tools/libxc/xc_dom_binloader.c b/tools/libxc/xc_dom_binloader.c
|
||||
index bde93f7..8596a28 100644
|
||||
--- a/tools/libxc/xc_dom_binloader.c
|
||||
+++ b/tools/libxc/xc_dom_binloader.c
|
||||
@@ -123,10 +123,13 @@ static struct xen_bin_image_table *find_table(struct xc_dom_image *dom)
|
||||
uint32_t *probe_ptr;
|
||||
uint32_t *probe_end;
|
||||
|
||||
+ if ( dom->kernel_size < sizeof(*table) )
|
||||
+ return NULL;
|
||||
probe_ptr = dom->kernel_blob;
|
||||
- probe_end = dom->kernel_blob + dom->kernel_size - sizeof(*table);
|
||||
- if ( (void*)probe_end > (dom->kernel_blob + 8192) )
|
||||
+ if ( dom->kernel_size > (8192 + sizeof(*table)) )
|
||||
probe_end = dom->kernel_blob + 8192;
|
||||
+ else
|
||||
+ probe_end = dom->kernel_blob + dom->kernel_size - sizeof(*table);
|
||||
|
||||
for ( table = NULL; probe_ptr < probe_end; probe_ptr++ )
|
||||
{
|
||||
@@ -282,6 +285,14 @@ static int xc_dom_load_bin_kernel(struct xc_dom_image *dom)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
+ if ( image_size < skip ||
|
||||
+ image_size - skip < text_size )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: image is too small for declared text size",
|
||||
+ __FUNCTION__);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
memcpy(dest, image + skip, text_size);
|
||||
memset(dest + text_size, 0, bss_size);
|
||||
|
||||
--
|
||||
1.7.2.5
|
||||
#From 77c0829fa751f052f7b8ec08287aef6e7ba97bc5 Mon Sep 17 00:00:00 2001
|
||||
#From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
#Date: Fri, 14 Jun 2013 16:43:19 +0100
|
||||
#Subject: [PATCH 19/23] libxc: check failure of xc_dom_*_to_ptr, xc_map_foreign_range
|
||||
#
|
||||
#The return values from xc_dom_*_to_ptr and xc_map_foreign_range are
|
||||
#sometimes dereferenced, or subjected to pointer arithmetic, without
|
||||
#checking whether the relevant function failed and returned NULL.
|
||||
#
|
||||
#Add an appropriate error check at every call site.
|
||||
#
|
||||
#Changes in the 4.2 backport of this series:
|
||||
#* Fix tools/libxc/xc_dom_x86.c:setup_pgtables_x86_32.
|
||||
#* Fix tools/libxc/xc_dom_ia64.c:start_info_ia64.
|
||||
#* Fix tools/libxc/ia64/xc_ia64_dom_fwloader.c:xc_dom_load_fw_kernel.
|
||||
#
|
||||
#This is part of the fix to a security issue, XSA-55.
|
||||
#
|
||||
#Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
#---
|
||||
# tools/libxc/ia64/xc_ia64_dom_fwloader.c | 2 +
|
||||
# tools/libxc/xc_dom_binloader.c | 6 +++
|
||||
# tools/libxc/xc_dom_core.c | 6 +++
|
||||
# tools/libxc/xc_dom_elfloader.c | 13 +++++++
|
||||
# tools/libxc/xc_dom_ia64.c | 6 +++
|
||||
# tools/libxc/xc_dom_x86.c | 55 +++++++++++++++++++++++++++++++
|
||||
# tools/libxc/xc_domain_restore.c | 27 +++++++++++++++
|
||||
# tools/libxc/xc_offline_page.c | 5 +++
|
||||
# 8 files changed, 120 insertions(+), 0 deletions(-)
|
||||
#
|
||||
diff --git a/tools/libxc/ia64/xc_ia64_dom_fwloader.c b/tools/libxc/ia64/xc_ia64_dom_fwloader.c
|
||||
index cdf3333..dbd3349 100644
|
||||
--- a/tools/libxc/ia64/xc_ia64_dom_fwloader.c
|
||||
+++ b/tools/libxc/ia64/xc_ia64_dom_fwloader.c
|
||||
@@ -60,6 +60,8 @@ static int xc_dom_load_fw_kernel(struct xc_dom_image *dom)
|
||||
unsigned long i;
|
||||
|
||||
dest = xc_dom_vaddr_to_ptr(dom, dom->kernel_seg.vstart);
|
||||
+ if ( dest == NULL )
|
||||
+ return -1;
|
||||
memcpy(dest, dom->kernel_blob, FW_SIZE);
|
||||
|
||||
/* Synchronize cache. */
|
||||
diff --git a/tools/libxc/xc_dom_binloader.c b/tools/libxc/xc_dom_binloader.c
|
||||
index 8596a28..553b366 100644
|
||||
--- a/tools/libxc/xc_dom_binloader.c
|
||||
+++ b/tools/libxc/xc_dom_binloader.c
|
||||
@@ -277,6 +277,12 @@ static int xc_dom_load_bin_kernel(struct xc_dom_image *dom)
|
||||
DOMPRINTF(" bss_size: 0x%" PRIx32 "", bss_size);
|
||||
|
||||
dest = xc_dom_vaddr_to_ptr(dom, dom->kernel_seg.vstart, &dest_size);
|
||||
+ if ( dest == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: xc_dom_vaddr_to_ptr(dom, dom->kernel_seg.vstart)"
|
||||
+ " => NULL", __FUNCTION__);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
|
||||
if ( dest_size < text_size ||
|
||||
dest_size - text_size < bss_size )
|
||||
diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c
|
||||
index 8913e41..a54ddae 100644
|
||||
--- a/tools/libxc/xc_dom_core.c
|
||||
+++ b/tools/libxc/xc_dom_core.c
|
||||
@@ -868,6 +868,12 @@ int xc_dom_build_image(struct xc_dom_image *dom)
|
||||
ramdisklen) != 0 )
|
||||
goto err;
|
||||
ramdiskmap = xc_dom_seg_to_ptr(dom, &dom->ramdisk_seg);
|
||||
+ if ( ramdiskmap == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: xc_dom_seg_to_ptr(dom, &dom->ramdisk_seg) => NULL",
|
||||
+ __FUNCTION__);
|
||||
+ goto err;
|
||||
+ }
|
||||
if ( unziplen )
|
||||
{
|
||||
if ( xc_dom_do_gunzip(dom->xch,
|
||||
diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c
|
||||
index 9fc4b94..61b5798 100644
|
||||
--- a/tools/libxc/xc_dom_elfloader.c
|
||||
+++ b/tools/libxc/xc_dom_elfloader.c
|
||||
@@ -139,6 +139,12 @@ static elf_errorstatus xc_dom_load_elf_symtab(struct xc_dom_image *dom,
|
||||
return 0;
|
||||
size = dom->kernel_seg.vend - dom->bsd_symtab_start;
|
||||
hdr_ptr = xc_dom_vaddr_to_ptr(dom, dom->bsd_symtab_start, &allow_size);
|
||||
+ if ( hdr_ptr == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s/load: xc_dom_vaddr_to_ptr(dom,dom->bsd_symtab_start"
|
||||
+ " => NULL", __FUNCTION__);
|
||||
+ return -1;
|
||||
+ }
|
||||
elf->caller_xdest_base = hdr_ptr;
|
||||
elf->caller_xdest_size = allow_size;
|
||||
hdr = ELF_REALPTR2PTRVAL(hdr_ptr);
|
||||
@@ -384,7 +390,14 @@ static elf_errorstatus xc_dom_load_elf_kernel(struct xc_dom_image *dom)
|
||||
xen_pfn_t pages;
|
||||
|
||||
elf->dest_base = xc_dom_seg_to_ptr_pages(dom, &dom->kernel_seg, &pages);
|
||||
+ if ( elf->dest_base == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: xc_dom_vaddr_to_ptr(dom,dom->kernel_seg)"
|
||||
+ " => NULL", __FUNCTION__);
|
||||
+ return -1;
|
||||
+ }
|
||||
elf->dest_size = pages * XC_DOM_PAGE_SIZE(dom);
|
||||
+
|
||||
rc = elf_load_binary(elf);
|
||||
if ( rc < 0 )
|
||||
{
|
||||
diff --git a/tools/libxc/xc_dom_ia64.c b/tools/libxc/xc_dom_ia64.c
|
||||
index dcd1523..7c0eff1 100644
|
||||
--- a/tools/libxc/xc_dom_ia64.c
|
||||
+++ b/tools/libxc/xc_dom_ia64.c
|
||||
@@ -60,6 +60,12 @@ int start_info_ia64(struct xc_dom_image *dom)
|
||||
|
||||
DOMPRINTF_CALLED(dom->xch);
|
||||
|
||||
+ if ( start_info == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: xc_dom_pfn_to_ptr failed on start_info", __FUNCTION__);
|
||||
+ return -1; /* our caller throws away our return value :-/ */
|
||||
+ }
|
||||
+
|
||||
memset(start_info, 0, sizeof(*start_info));
|
||||
sprintf(start_info->magic, dom->guest_type);
|
||||
start_info->flags = dom->flags;
|
||||
diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c
|
||||
index 0cf1687..75d6b83 100644
|
||||
--- a/tools/libxc/xc_dom_x86.c
|
||||
+++ b/tools/libxc/xc_dom_x86.c
|
||||
@@ -144,6 +144,9 @@ static int setup_pgtables_x86_32(struct xc_dom_image *dom)
|
||||
xen_vaddr_t addr;
|
||||
xen_pfn_t pgpfn;
|
||||
|
||||
+ if ( l2tab == NULL )
|
||||
+ goto pfn_error;
|
||||
+
|
||||
for ( addr = dom->parms.virt_base; addr < dom->virt_pgtab_end;
|
||||
addr += PAGE_SIZE_X86 )
|
||||
{
|
||||
@@ -151,6 +154,8 @@ static int setup_pgtables_x86_32(struct xc_dom_image *dom)
|
||||
{
|
||||
/* get L1 tab, make L2 entry */
|
||||
l1tab = xc_dom_pfn_to_ptr(dom, l1pfn, 1);
|
||||
+ if ( l1tab == NULL )
|
||||
+ goto pfn_error;
|
||||
l2off = l2_table_offset_i386(addr);
|
||||
l2tab[l2off] =
|
||||
pfn_to_paddr(xc_dom_p2m_guest(dom, l1pfn)) | L2_PROT;
|
||||
@@ -169,6 +174,11 @@ static int setup_pgtables_x86_32(struct xc_dom_image *dom)
|
||||
l1tab = NULL;
|
||||
}
|
||||
return 0;
|
||||
+
|
||||
+pfn_error:
|
||||
+ xc_dom_panic(dom->xch, XC_INTERNAL_ERROR,
|
||||
+ "%s: xc_dom_pfn_to_ptr failed", __FUNCTION__);
|
||||
+ return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -219,6 +229,12 @@ static xen_pfn_t move_l3_below_4G(struct xc_dom_image *dom,
|
||||
goto out;
|
||||
|
||||
l3tab = xc_dom_pfn_to_ptr(dom, l3pfn, 1);
|
||||
+ if ( l3tab == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: xc_dom_pfn_to_ptr(dom, l3pfn, 1) => NULL",
|
||||
+ __FUNCTION__);
|
||||
+ return l3mfn; /* our one call site will call xc_dom_panic and fail */
|
||||
+ }
|
||||
memset(l3tab, 0, XC_DOM_PAGE_SIZE(dom));
|
||||
|
||||
DOMPRINTF("%s: successfully relocated L3 below 4G. "
|
||||
@@ -262,6 +278,8 @@ static int setup_pgtables_x86_32_pae(struct xc_dom_image *dom)
|
||||
}
|
||||
|
||||
l3tab = xc_dom_pfn_to_ptr(dom, l3pfn, 1);
|
||||
+ if ( l3tab == NULL )
|
||||
+ goto pfn_error;
|
||||
|
||||
for ( addr = dom->parms.virt_base; addr < dom->virt_pgtab_end;
|
||||
addr += PAGE_SIZE_X86 )
|
||||
@@ -270,6 +288,8 @@ static int setup_pgtables_x86_32_pae(struct xc_dom_image *dom)
|
||||
{
|
||||
/* get L2 tab, make L3 entry */
|
||||
l2tab = xc_dom_pfn_to_ptr(dom, l2pfn, 1);
|
||||
+ if ( l2tab == NULL )
|
||||
+ goto pfn_error;
|
||||
l3off = l3_table_offset_pae(addr);
|
||||
l3tab[l3off] =
|
||||
pfn_to_paddr(xc_dom_p2m_guest(dom, l2pfn)) | L3_PROT;
|
||||
@@ -280,6 +300,8 @@ static int setup_pgtables_x86_32_pae(struct xc_dom_image *dom)
|
||||
{
|
||||
/* get L1 tab, make L2 entry */
|
||||
l1tab = xc_dom_pfn_to_ptr(dom, l1pfn, 1);
|
||||
+ if ( l1tab == NULL )
|
||||
+ goto pfn_error;
|
||||
l2off = l2_table_offset_pae(addr);
|
||||
l2tab[l2off] =
|
||||
pfn_to_paddr(xc_dom_p2m_guest(dom, l1pfn)) | L2_PROT;
|
||||
@@ -306,6 +328,11 @@ static int setup_pgtables_x86_32_pae(struct xc_dom_image *dom)
|
||||
l3tab[3] = pfn_to_paddr(xc_dom_p2m_guest(dom, l2pfn)) | L3_PROT;
|
||||
}
|
||||
return 0;
|
||||
+
|
||||
+pfn_error:
|
||||
+ xc_dom_panic(dom->xch, XC_INTERNAL_ERROR,
|
||||
+ "%s: xc_dom_pfn_to_ptr failed", __FUNCTION__);
|
||||
+ return -EINVAL;
|
||||
}
|
||||
|
||||
#undef L1_PROT
|
||||
@@ -344,6 +371,9 @@ static int setup_pgtables_x86_64(struct xc_dom_image *dom)
|
||||
uint64_t addr;
|
||||
xen_pfn_t pgpfn;
|
||||
|
||||
+ if ( l4tab == NULL )
|
||||
+ goto pfn_error;
|
||||
+
|
||||
for ( addr = dom->parms.virt_base; addr < dom->virt_pgtab_end;
|
||||
addr += PAGE_SIZE_X86 )
|
||||
{
|
||||
@@ -351,6 +381,8 @@ static int setup_pgtables_x86_64(struct xc_dom_image *dom)
|
||||
{
|
||||
/* get L3 tab, make L4 entry */
|
||||
l3tab = xc_dom_pfn_to_ptr(dom, l3pfn, 1);
|
||||
+ if ( l3tab == NULL )
|
||||
+ goto pfn_error;
|
||||
l4off = l4_table_offset_x86_64(addr);
|
||||
l4tab[l4off] =
|
||||
pfn_to_paddr(xc_dom_p2m_guest(dom, l3pfn)) | L4_PROT;
|
||||
@@ -361,6 +393,8 @@ static int setup_pgtables_x86_64(struct xc_dom_image *dom)
|
||||
{
|
||||
/* get L2 tab, make L3 entry */
|
||||
l2tab = xc_dom_pfn_to_ptr(dom, l2pfn, 1);
|
||||
+ if ( l2tab == NULL )
|
||||
+ goto pfn_error;
|
||||
l3off = l3_table_offset_x86_64(addr);
|
||||
l3tab[l3off] =
|
||||
pfn_to_paddr(xc_dom_p2m_guest(dom, l2pfn)) | L3_PROT;
|
||||
@@ -373,6 +407,8 @@ static int setup_pgtables_x86_64(struct xc_dom_image *dom)
|
||||
{
|
||||
/* get L1 tab, make L2 entry */
|
||||
l1tab = xc_dom_pfn_to_ptr(dom, l1pfn, 1);
|
||||
+ if ( l1tab == NULL )
|
||||
+ goto pfn_error;
|
||||
l2off = l2_table_offset_x86_64(addr);
|
||||
l2tab[l2off] =
|
||||
pfn_to_paddr(xc_dom_p2m_guest(dom, l1pfn)) | L2_PROT;
|
||||
@@ -393,6 +429,11 @@ static int setup_pgtables_x86_64(struct xc_dom_image *dom)
|
||||
l1tab = NULL;
|
||||
}
|
||||
return 0;
|
||||
+
|
||||
+pfn_error:
|
||||
+ xc_dom_panic(dom->xch, XC_INTERNAL_ERROR,
|
||||
+ "%s: xc_dom_pfn_to_ptr failed", __FUNCTION__);
|
||||
+ return -EINVAL;
|
||||
}
|
||||
|
||||
#undef L1_PROT
|
||||
@@ -410,6 +451,8 @@ static int alloc_magic_pages(struct xc_dom_image *dom)
|
||||
if ( xc_dom_alloc_segment(dom, &dom->p2m_seg, "phys2mach", 0, p2m_size) )
|
||||
return -1;
|
||||
dom->p2m_guest = xc_dom_seg_to_ptr(dom, &dom->p2m_seg);
|
||||
+ if ( dom->p2m_guest == NULL )
|
||||
+ return -1;
|
||||
|
||||
/* allocate special pages */
|
||||
dom->start_info_pfn = xc_dom_alloc_page(dom, "start info");
|
||||
@@ -434,6 +477,12 @@ static int start_info_x86_32(struct xc_dom_image *dom)
|
||||
|
||||
DOMPRINTF_CALLED(dom->xch);
|
||||
|
||||
+ if ( start_info == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: xc_dom_pfn_to_ptr failed on start_info", __FUNCTION__);
|
||||
+ return -1; /* our caller throws away our return value :-/ */
|
||||
+ }
|
||||
+
|
||||
memset(start_info, 0, sizeof(*start_info));
|
||||
strncpy(start_info->magic, dom->guest_type, sizeof(start_info->magic));
|
||||
start_info->magic[sizeof(start_info->magic) - 1] = '\0';
|
||||
@@ -474,6 +523,12 @@ static int start_info_x86_64(struct xc_dom_image *dom)
|
||||
|
||||
DOMPRINTF_CALLED(dom->xch);
|
||||
|
||||
+ if ( start_info == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: xc_dom_pfn_to_ptr failed on start_info", __FUNCTION__);
|
||||
+ return -1; /* our caller throws away our return value :-/ */
|
||||
+ }
|
||||
+
|
||||
memset(start_info, 0, sizeof(*start_info));
|
||||
strncpy(start_info->magic, dom->guest_type, sizeof(start_info->magic));
|
||||
start_info->magic[sizeof(start_info->magic) - 1] = '\0';
|
||||
diff --git a/tools/libxc/xc_domain_restore.c b/tools/libxc/xc_domain_restore.c
|
||||
index b4c0b10..3994f8f 100644
|
||||
--- a/tools/libxc/xc_domain_restore.c
|
||||
+++ b/tools/libxc/xc_domain_restore.c
|
||||
@@ -1556,6 +1556,12 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
|
||||
mfn = ctx->p2m[pfn];
|
||||
buf = xc_map_foreign_range(xch, dom, PAGE_SIZE,
|
||||
PROT_READ | PROT_WRITE, mfn);
|
||||
+ if ( buf == NULL )
|
||||
+ {
|
||||
+ ERROR("xc_map_foreign_range for generation id"
|
||||
+ " buffer failed");
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
generationid = *(unsigned long long *)(buf + offset);
|
||||
*(unsigned long long *)(buf + offset) = generationid + 1;
|
||||
@@ -1713,6 +1719,11 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
|
||||
l3tab = (uint64_t *)
|
||||
xc_map_foreign_range(xch, dom, PAGE_SIZE,
|
||||
PROT_READ, ctx->p2m[i]);
|
||||
+ if ( l3tab == NULL )
|
||||
+ {
|
||||
+ PERROR("xc_map_foreign_range failed (for l3tab)");
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
for ( j = 0; j < 4; j++ )
|
||||
l3ptes[j] = l3tab[j];
|
||||
@@ -1739,6 +1750,11 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
|
||||
l3tab = (uint64_t *)
|
||||
xc_map_foreign_range(xch, dom, PAGE_SIZE,
|
||||
PROT_READ | PROT_WRITE, ctx->p2m[i]);
|
||||
+ if ( l3tab == NULL )
|
||||
+ {
|
||||
+ PERROR("xc_map_foreign_range failed (for l3tab, 2nd)");
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
for ( j = 0; j < 4; j++ )
|
||||
l3tab[j] = l3ptes[j];
|
||||
@@ -1909,6 +1925,12 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
|
||||
SET_FIELD(ctxt, user_regs.edx, mfn);
|
||||
start_info = xc_map_foreign_range(
|
||||
xch, dom, PAGE_SIZE, PROT_READ | PROT_WRITE, mfn);
|
||||
+ if ( start_info == NULL )
|
||||
+ {
|
||||
+ PERROR("xc_map_foreign_range failed (for start_info)");
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
SET_FIELD(start_info, nr_pages, dinfo->p2m_size);
|
||||
SET_FIELD(start_info, shared_info, shared_info_frame<<PAGE_SHIFT);
|
||||
SET_FIELD(start_info, flags, 0);
|
||||
@@ -2056,6 +2078,11 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
|
||||
/* Restore contents of shared-info page. No checking needed. */
|
||||
new_shared_info = xc_map_foreign_range(
|
||||
xch, dom, PAGE_SIZE, PROT_WRITE, shared_info_frame);
|
||||
+ if ( new_shared_info == NULL )
|
||||
+ {
|
||||
+ PERROR("xc_map_foreign_range failed (for new_shared_info)");
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
/* restore saved vcpu_info and arch specific info */
|
||||
MEMCPY_FIELD(new_shared_info, old_shared_info, vcpu_info);
|
||||
diff --git a/tools/libxc/xc_offline_page.c b/tools/libxc/xc_offline_page.c
|
||||
index 089a361..36b9812 100644
|
||||
--- a/tools/libxc/xc_offline_page.c
|
||||
+++ b/tools/libxc/xc_offline_page.c
|
||||
@@ -714,6 +714,11 @@ int xc_exchange_page(xc_interface *xch, int domid, xen_pfn_t mfn)
|
||||
|
||||
new_p = xc_map_foreign_range(xch, domid, PAGE_SIZE,
|
||||
PROT_READ|PROT_WRITE, new_mfn);
|
||||
+ if ( new_p == NULL )
|
||||
+ {
|
||||
+ ERROR("failed to map new_p for copy, guest may be broken?");
|
||||
+ goto failed;
|
||||
+ }
|
||||
memcpy(new_p, backup, PAGE_SIZE);
|
||||
munmap(new_p, PAGE_SIZE);
|
||||
mops.arg1.mfn = new_mfn;
|
||||
--
|
||||
1.7.2.5
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
From a672da4b2d58ef12be9d7407160e9fb43cac75d9 Mon Sep 17 00:00:00 2001
|
||||
From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Date: Fri, 14 Jun 2013 16:43:16 +0100
|
||||
Subject: [PATCH 02/23] libxc: introduce xc_dom_seg_to_ptr_pages
|
||||
|
||||
Provide a version of xc_dom_seg_to_ptr which returns the number of
|
||||
guest pages it has actually mapped. This is useful for callers who
|
||||
want to do range checking; we will use this later in this series.
|
||||
|
||||
This is part of the fix to a security issue, XSA-55.
|
||||
|
||||
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
---
|
||||
tools/libxc/xc_dom.h | 19 ++++++++++++++++---
|
||||
1 files changed, 16 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/tools/libxc/xc_dom.h b/tools/libxc/xc_dom.h
|
||||
index 6a72aa9..9af2195 100644
|
||||
--- a/tools/libxc/xc_dom.h
|
||||
+++ b/tools/libxc/xc_dom.h
|
||||
@@ -278,14 +278,27 @@ void *xc_dom_pfn_to_ptr(struct xc_dom_image *dom, xen_pfn_t first,
|
||||
void xc_dom_unmap_one(struct xc_dom_image *dom, xen_pfn_t pfn);
|
||||
void xc_dom_unmap_all(struct xc_dom_image *dom);
|
||||
|
||||
-static inline void *xc_dom_seg_to_ptr(struct xc_dom_image *dom,
|
||||
- struct xc_dom_seg *seg)
|
||||
+static inline void *xc_dom_seg_to_ptr_pages(struct xc_dom_image *dom,
|
||||
+ struct xc_dom_seg *seg,
|
||||
+ xen_pfn_t *pages_out)
|
||||
{
|
||||
xen_vaddr_t segsize = seg->vend - seg->vstart;
|
||||
unsigned int page_size = XC_DOM_PAGE_SIZE(dom);
|
||||
xen_pfn_t pages = (segsize + page_size - 1) / page_size;
|
||||
+ void *retval;
|
||||
+
|
||||
+ retval = xc_dom_pfn_to_ptr(dom, seg->pfn, pages);
|
||||
+
|
||||
+ *pages_out = retval ? pages : 0;
|
||||
+ return retval;
|
||||
+}
|
||||
+
|
||||
+static inline void *xc_dom_seg_to_ptr(struct xc_dom_image *dom,
|
||||
+ struct xc_dom_seg *seg)
|
||||
+{
|
||||
+ xen_pfn_t dummy;
|
||||
|
||||
- return xc_dom_pfn_to_ptr(dom, seg->pfn, pages);
|
||||
+ return xc_dom_seg_to_ptr_pages(dom, seg, &dummy);
|
||||
}
|
||||
|
||||
static inline void *xc_dom_vaddr_to_ptr(struct xc_dom_image *dom,
|
||||
--
|
||||
1.7.2.5
|
||||
|
|
@ -1,381 +0,0 @@
|
|||
From 8dc90d163650ce8aa36ae0b46debab83cc61edb6 Mon Sep 17 00:00:00 2001
|
||||
From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Date: Fri, 14 Jun 2013 16:43:19 +0100
|
||||
Subject: [PATCH 20/23] libxc: check return values from malloc
|
||||
|
||||
A sufficiently malformed input to libxc (such as a malformed input ELF
|
||||
or other guest-controlled data) might cause one of libxc's malloc() to
|
||||
fail. In this case we need to make sure we don't dereference or do
|
||||
pointer arithmetic on the result.
|
||||
|
||||
Search for all occurrences of \b(m|c|re)alloc in libxc, and all
|
||||
functions which call them, and add appropriate error checking where
|
||||
missing.
|
||||
|
||||
This includes the functions xc_dom_malloc*, which now print a message
|
||||
when they fail so that callers don't have to do so.
|
||||
|
||||
The function xc_cpuid_to_str wasn't provided with a sane return value
|
||||
and has a pretty strange API, which now becomes a little stranger.
|
||||
There are no in-tree callers.
|
||||
|
||||
Changes in the Xen 4.2 version of this series:
|
||||
* No need to fix code relating to ARM.
|
||||
* No need to fix code relating to superpage support.
|
||||
* Additionally fix `dom->p2m_host = xc_dom_malloc...' in xc_dom_ia64.c.
|
||||
|
||||
This is part of the fix to a security issue, XSA-55.
|
||||
|
||||
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
---
|
||||
tools/libxc/xc_cpuid_x86.c | 20 ++++++++++++++++++--
|
||||
tools/libxc/xc_dom_core.c | 13 +++++++++++++
|
||||
tools/libxc/xc_dom_elfloader.c | 2 ++
|
||||
tools/libxc/xc_dom_ia64.c | 6 ++++++
|
||||
tools/libxc/xc_dom_x86.c | 3 +++
|
||||
tools/libxc/xc_domain_restore.c | 5 +++++
|
||||
tools/libxc/xc_linux_osdep.c | 4 ++++
|
||||
tools/libxc/xc_private.c | 2 ++
|
||||
tools/libxc/xenctrl.h | 2 +-
|
||||
9 files changed, 54 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/tools/libxc/xc_cpuid_x86.c b/tools/libxc/xc_cpuid_x86.c
|
||||
index 0882ce6..da435ce 100644
|
||||
--- a/tools/libxc/xc_cpuid_x86.c
|
||||
+++ b/tools/libxc/xc_cpuid_x86.c
|
||||
@@ -589,6 +589,8 @@ static int xc_cpuid_do_domctl(
|
||||
static char *alloc_str(void)
|
||||
{
|
||||
char *s = malloc(33);
|
||||
+ if ( s == NULL )
|
||||
+ return s;
|
||||
memset(s, 0, 33);
|
||||
return s;
|
||||
}
|
||||
@@ -600,6 +602,8 @@ void xc_cpuid_to_str(const unsigned int *regs, char **strs)
|
||||
for ( i = 0; i < 4; i++ )
|
||||
{
|
||||
strs[i] = alloc_str();
|
||||
+ if ( strs[i] == NULL )
|
||||
+ continue;
|
||||
for ( j = 0; j < 32; j++ )
|
||||
strs[i][j] = !!((regs[i] & (1U << (31 - j)))) ? '1' : '0';
|
||||
}
|
||||
@@ -680,7 +684,7 @@ int xc_cpuid_check(
|
||||
const char **config,
|
||||
char **config_transformed)
|
||||
{
|
||||
- int i, j;
|
||||
+ int i, j, rc;
|
||||
unsigned int regs[4];
|
||||
|
||||
memset(config_transformed, 0, 4 * sizeof(*config_transformed));
|
||||
@@ -692,6 +696,11 @@ int xc_cpuid_check(
|
||||
if ( config[i] == NULL )
|
||||
continue;
|
||||
config_transformed[i] = alloc_str();
|
||||
+ if ( config_transformed[i] == NULL )
|
||||
+ {
|
||||
+ rc = -ENOMEM;
|
||||
+ goto fail_rc;
|
||||
+ }
|
||||
for ( j = 0; j < 32; j++ )
|
||||
{
|
||||
unsigned char val = !!((regs[i] & (1U << (31 - j))));
|
||||
@@ -708,12 +717,14 @@ int xc_cpuid_check(
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
+ rc = -EPERM;
|
||||
+ fail_rc:
|
||||
for ( i = 0; i < 4; i++ )
|
||||
{
|
||||
free(config_transformed[i]);
|
||||
config_transformed[i] = NULL;
|
||||
}
|
||||
- return -EPERM;
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -758,6 +769,11 @@ int xc_cpuid_set(
|
||||
}
|
||||
|
||||
config_transformed[i] = alloc_str();
|
||||
+ if ( config_transformed[i] == NULL )
|
||||
+ {
|
||||
+ rc = -ENOMEM;
|
||||
+ goto fail;
|
||||
+ }
|
||||
|
||||
for ( j = 0; j < 32; j++ )
|
||||
{
|
||||
diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c
|
||||
index a54ddae..3cbf9f7 100644
|
||||
--- a/tools/libxc/xc_dom_core.c
|
||||
+++ b/tools/libxc/xc_dom_core.c
|
||||
@@ -120,9 +120,17 @@ void *xc_dom_malloc(struct xc_dom_image *dom, size_t size)
|
||||
{
|
||||
struct xc_dom_mem *block;
|
||||
|
||||
+ if ( size > SIZE_MAX - sizeof(*block) )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: unreasonable allocation size", __FUNCTION__);
|
||||
+ return NULL;
|
||||
+ }
|
||||
block = malloc(sizeof(*block) + size);
|
||||
if ( block == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: allocation failed", __FUNCTION__);
|
||||
return NULL;
|
||||
+ }
|
||||
memset(block, 0, sizeof(*block) + size);
|
||||
block->next = dom->memblocks;
|
||||
dom->memblocks = block;
|
||||
@@ -138,7 +146,10 @@ void *xc_dom_malloc_page_aligned(struct xc_dom_image *dom, size_t size)
|
||||
|
||||
block = malloc(sizeof(*block));
|
||||
if ( block == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: allocation failed", __FUNCTION__);
|
||||
return NULL;
|
||||
+ }
|
||||
memset(block, 0, sizeof(*block));
|
||||
block->mmap_len = size;
|
||||
block->mmap_ptr = mmap(NULL, block->mmap_len,
|
||||
@@ -146,6 +157,7 @@ void *xc_dom_malloc_page_aligned(struct xc_dom_image *dom, size_t size)
|
||||
-1, 0);
|
||||
if ( block->mmap_ptr == MAP_FAILED )
|
||||
{
|
||||
+ DOMPRINTF("%s: mmap failed", __FUNCTION__);
|
||||
free(block);
|
||||
return NULL;
|
||||
}
|
||||
@@ -202,6 +214,7 @@ void *xc_dom_malloc_filemap(struct xc_dom_image *dom,
|
||||
close(fd);
|
||||
if ( block != NULL )
|
||||
free(block);
|
||||
+ DOMPRINTF("%s: failed (on file `%s')", __FUNCTION__, filename);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c
|
||||
index 61b5798..be58276 100644
|
||||
--- a/tools/libxc/xc_dom_elfloader.c
|
||||
+++ b/tools/libxc/xc_dom_elfloader.c
|
||||
@@ -329,6 +329,8 @@ static elf_errorstatus xc_dom_parse_elf_kernel(struct xc_dom_image *dom)
|
||||
return rc;
|
||||
|
||||
elf = xc_dom_malloc(dom, sizeof(*elf));
|
||||
+ if ( elf == NULL )
|
||||
+ return -1;
|
||||
dom->private_loader = elf;
|
||||
rc = elf_init(elf, dom->kernel_blob, dom->kernel_size);
|
||||
xc_elf_set_logfile(dom->xch, elf, 1);
|
||||
diff --git a/tools/libxc/xc_dom_ia64.c b/tools/libxc/xc_dom_ia64.c
|
||||
index 7c0eff1..076821c 100644
|
||||
--- a/tools/libxc/xc_dom_ia64.c
|
||||
+++ b/tools/libxc/xc_dom_ia64.c
|
||||
@@ -188,6 +188,12 @@ int arch_setup_meminit(struct xc_dom_image *dom)
|
||||
|
||||
/* setup initial p2m */
|
||||
dom->p2m_host = xc_dom_malloc(dom, sizeof(xen_pfn_t) * nbr);
|
||||
+ if ( dom->p2m_host == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: xc_dom_malloc failed for p2m_host",
|
||||
+ __FUNCTION__);
|
||||
+ return -1;
|
||||
+ }
|
||||
for ( pfn = 0; pfn < nbr; pfn++ )
|
||||
dom->p2m_host[pfn] = start + pfn;
|
||||
|
||||
diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c
|
||||
index 75d6b83..448d9a1 100644
|
||||
--- a/tools/libxc/xc_dom_x86.c
|
||||
+++ b/tools/libxc/xc_dom_x86.c
|
||||
@@ -780,6 +780,9 @@ int arch_setup_meminit(struct xc_dom_image *dom)
|
||||
}
|
||||
|
||||
dom->p2m_host = xc_dom_malloc(dom, sizeof(xen_pfn_t) * dom->total_pages);
|
||||
+ if ( dom->p2m_host == NULL )
|
||||
+ return -EINVAL;
|
||||
+
|
||||
if ( dom->superpages )
|
||||
{
|
||||
int count = dom->total_pages >> SUPERPAGE_PFN_SHIFT;
|
||||
diff --git a/tools/libxc/xc_domain_restore.c b/tools/libxc/xc_domain_restore.c
|
||||
index 3994f8f..f9ed6b2 100644
|
||||
--- a/tools/libxc/xc_domain_restore.c
|
||||
+++ b/tools/libxc/xc_domain_restore.c
|
||||
@@ -1180,6 +1180,11 @@ static int apply_batch(xc_interface *xch, uint32_t dom, struct restore_ctx *ctx,
|
||||
|
||||
/* Map relevant mfns */
|
||||
pfn_err = calloc(j, sizeof(*pfn_err));
|
||||
+ if ( pfn_err == NULL )
|
||||
+ {
|
||||
+ PERROR("allocation for pfn_err failed");
|
||||
+ return -1;
|
||||
+ }
|
||||
region_base = xc_map_foreign_bulk(
|
||||
xch, dom, PROT_WRITE, region_mfn, pfn_err, j);
|
||||
|
||||
diff --git a/tools/libxc/xc_linux_osdep.c b/tools/libxc/xc_linux_osdep.c
|
||||
index 787e742..98e041c 100644
|
||||
--- a/tools/libxc/xc_linux_osdep.c
|
||||
+++ b/tools/libxc/xc_linux_osdep.c
|
||||
@@ -378,6 +378,8 @@ static void *linux_privcmd_map_foreign_range(xc_interface *xch, xc_osdep_handle
|
||||
|
||||
num = (size + XC_PAGE_SIZE - 1) >> XC_PAGE_SHIFT;
|
||||
arr = calloc(num, sizeof(xen_pfn_t));
|
||||
+ if ( arr == NULL )
|
||||
+ return NULL;
|
||||
|
||||
for ( i = 0; i < num; i++ )
|
||||
arr[i] = mfn + i;
|
||||
@@ -402,6 +404,8 @@ static void *linux_privcmd_map_foreign_ranges(xc_interface *xch, xc_osdep_handle
|
||||
num_per_entry = chunksize >> XC_PAGE_SHIFT;
|
||||
num = num_per_entry * nentries;
|
||||
arr = calloc(num, sizeof(xen_pfn_t));
|
||||
+ if ( arr == NULL )
|
||||
+ return NULL;
|
||||
|
||||
for ( i = 0; i < nentries; i++ )
|
||||
for ( j = 0; j < num_per_entry; j++ )
|
||||
diff --git a/tools/libxc/xc_private.c b/tools/libxc/xc_private.c
|
||||
index 3e03a91..848ceed 100644
|
||||
--- a/tools/libxc/xc_private.c
|
||||
+++ b/tools/libxc/xc_private.c
|
||||
@@ -771,6 +771,8 @@ const char *xc_strerror(xc_interface *xch, int errcode)
|
||||
errbuf = pthread_getspecific(errbuf_pkey);
|
||||
if (errbuf == NULL) {
|
||||
errbuf = malloc(XS_BUFSIZE);
|
||||
+ if ( errbuf == NULL )
|
||||
+ return "(failed to allocate errbuf)";
|
||||
pthread_setspecific(errbuf_pkey, errbuf);
|
||||
}
|
||||
|
||||
diff --git a/tools/libxc/xenctrl.h b/tools/libxc/xenctrl.h
|
||||
index b7741ca..8952048 100644
|
||||
--- a/tools/libxc/xenctrl.h
|
||||
+++ b/tools/libxc/xenctrl.h
|
||||
@@ -1778,7 +1778,7 @@ int xc_cpuid_set(xc_interface *xch,
|
||||
int xc_cpuid_apply_policy(xc_interface *xch,
|
||||
domid_t domid);
|
||||
void xc_cpuid_to_str(const unsigned int *regs,
|
||||
- char **strs);
|
||||
+ char **strs); /* some strs[] may be NULL if ENOMEM */
|
||||
int xc_mca_op(xc_interface *xch, struct xen_mc *mc);
|
||||
#endif
|
||||
|
||||
--
|
||||
1.7.2.5
|
||||
#From 052a689aa526ca51fd70528d4b0f83dfb2de99c1 Mon Sep 17 00:00:00 2001
|
||||
#From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
#Date: Fri, 14 Jun 2013 16:43:19 +0100
|
||||
#Subject: [PATCH 21/23] libxc: range checks in xc_dom_p2m_host and _guest
|
||||
#
|
||||
#These functions take guest pfns and look them up in the p2m. They did
|
||||
#no range checking.
|
||||
#
|
||||
#However, some callers, notably xc_dom_boot.c:setup_hypercall_page want
|
||||
#to pass untrusted guest-supplied value(s). It is most convenient to
|
||||
#detect this here and return INVALID_MFN.
|
||||
#
|
||||
#This is part of the fix to a security issue, XSA-55.
|
||||
#
|
||||
#Changes from Xen 4.2 version of this patch:
|
||||
#* 4.2 lacks dom->rambase_pfn, so don't add/subtract/check it.
|
||||
#
|
||||
#Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
#---
|
||||
# tools/libxc/xc_dom.h | 4 ++++
|
||||
# 1 files changed, 4 insertions(+), 0 deletions(-)
|
||||
#
|
||||
diff --git a/tools/libxc/xc_dom.h b/tools/libxc/xc_dom.h
|
||||
index 0161459..d801f66 100644
|
||||
--- a/tools/libxc/xc_dom.h
|
||||
+++ b/tools/libxc/xc_dom.h
|
||||
@@ -331,6 +331,8 @@ static inline xen_pfn_t xc_dom_p2m_host(struct xc_dom_image *dom, xen_pfn_t pfn)
|
||||
{
|
||||
if (dom->shadow_enabled)
|
||||
return pfn;
|
||||
+ if (pfn >= dom->total_pages)
|
||||
+ return INVALID_MFN;
|
||||
return dom->p2m_host[pfn];
|
||||
}
|
||||
|
||||
@@ -339,6 +341,8 @@ static inline xen_pfn_t xc_dom_p2m_guest(struct xc_dom_image *dom,
|
||||
{
|
||||
if (xc_dom_feature_translated(dom))
|
||||
return pfn;
|
||||
+ if (pfn >= dom->total_pages)
|
||||
+ return INVALID_MFN;
|
||||
return dom->p2m_host[pfn];
|
||||
}
|
||||
|
||||
--
|
||||
1.7.2.5
|
||||
#From 2a548e22915535ac13694eb38222903bca7245e3 Mon Sep 17 00:00:00 2001
|
||||
#From: Matthew Daley <mattjd@gmail.com>
|
||||
#Date: Fri, 14 Jun 2013 16:43:19 +0100
|
||||
#Subject: [PATCH 22/23] libxc: check blob size before proceeding in xc_dom_check_gzip
|
||||
#
|
||||
#This is part of the fix to a security issue, XSA-55.
|
||||
#
|
||||
#Signed-off-by: Matthew Daley <mattjd@gmail.com>
|
||||
#---
|
||||
# tools/libxc/xc_dom_core.c | 5 +++++
|
||||
# 1 files changed, 5 insertions(+), 0 deletions(-)
|
||||
#
|
||||
diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c
|
||||
index 3cbf9f7..f8d1b08 100644
|
||||
--- a/tools/libxc/xc_dom_core.c
|
||||
+++ b/tools/libxc/xc_dom_core.c
|
||||
@@ -284,6 +284,11 @@ size_t xc_dom_check_gzip(xc_interface *xch, void *blob, size_t ziplen)
|
||||
unsigned char *gzlen;
|
||||
size_t unziplen;
|
||||
|
||||
+ if ( ziplen < 6 )
|
||||
+ /* Too small. We need (i.e. the subsequent code relies on)
|
||||
+ * 2 bytes for the magic number plus 4 bytes length. */
|
||||
+ return 0;
|
||||
+
|
||||
if ( strncmp(blob, "\037\213", 2) )
|
||||
/* not gzipped */
|
||||
return 0;
|
||||
--
|
||||
1.7.2.5
|
||||
#From d21d36e84354c04638b60a739a5f7c3d9f8adaf8 Mon Sep 17 00:00:00 2001
|
||||
#From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
#Date: Fri, 14 Jun 2013 16:43:19 +0100
|
||||
#Subject: [PATCH 23/23] libxc: Better range check in xc_dom_alloc_segment
|
||||
#
|
||||
#If seg->pfn is too large, the arithmetic in the range check might
|
||||
#overflow, defeating the range check.
|
||||
#
|
||||
#This is part of the fix to a security issue, XSA-55.
|
||||
#
|
||||
#Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
#Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||
#---
|
||||
# tools/libxc/xc_dom_core.c | 3 ++-
|
||||
# 1 files changed, 2 insertions(+), 1 deletions(-)
|
||||
#
|
||||
diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c
|
||||
index f8d1b08..e79e38d 100644
|
||||
--- a/tools/libxc/xc_dom_core.c
|
||||
+++ b/tools/libxc/xc_dom_core.c
|
||||
@@ -509,7 +509,8 @@ int xc_dom_alloc_segment(struct xc_dom_image *dom,
|
||||
seg->vstart = start;
|
||||
seg->pfn = (seg->vstart - dom->parms.virt_base) / page_size;
|
||||
|
||||
- if ( pages > dom->total_pages || /* double test avoids overflow probs */
|
||||
+ if ( pages > dom->total_pages || /* multiple test avoids overflow probs */
|
||||
+ seg->pfn > dom->total_pages ||
|
||||
pages > dom->total_pages - seg->pfn)
|
||||
{
|
||||
xc_dom_panic(dom->xch, XC_OUT_OF_MEMORY,
|
||||
--
|
||||
1.7.2.5
|
||||
|
||||
|
|
@ -1,156 +0,0 @@
|
|||
From 8c738fa5c1f3cfcd935b6191b3526f7ac8b2a5bd Mon Sep 17 00:00:00 2001
|
||||
From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Date: Fri, 14 Jun 2013 16:43:16 +0100
|
||||
Subject: [PATCH 03/23] libxc: Fix range checking in xc_dom_pfn_to_ptr etc.
|
||||
|
||||
* Ensure that xc_dom_pfn_to_ptr (when called with count==0) does not
|
||||
return a previously-allocated block which is entirely before the
|
||||
requested pfn (!)
|
||||
|
||||
* Provide a version of xc_dom_pfn_to_ptr, xc_dom_pfn_to_ptr_retcount,
|
||||
which provides the length of the mapped region via an out parameter.
|
||||
|
||||
* Change xc_dom_vaddr_to_ptr to always provide the length of the
|
||||
mapped region and change the call site in xc_dom_binloader.c to
|
||||
check it. The call site in xc_dom_load_elf_symtab will be corrected
|
||||
in a forthcoming patch, and for now ignores the returned length.
|
||||
|
||||
This is part of the fix to a security issue, XSA-55.
|
||||
|
||||
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
---
|
||||
tools/libxc/xc_dom.h | 16 +++++++++++++---
|
||||
tools/libxc/xc_dom_binloader.c | 11 ++++++++++-
|
||||
tools/libxc/xc_dom_core.c | 13 +++++++++++++
|
||||
tools/libxc/xc_dom_elfloader.c | 3 ++-
|
||||
4 files changed, 38 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/tools/libxc/xc_dom.h b/tools/libxc/xc_dom.h
|
||||
index 9af2195..9f8037e 100644
|
||||
--- a/tools/libxc/xc_dom.h
|
||||
+++ b/tools/libxc/xc_dom.h
|
||||
@@ -275,6 +275,8 @@ int xc_dom_alloc_segment(struct xc_dom_image *dom,
|
||||
|
||||
void *xc_dom_pfn_to_ptr(struct xc_dom_image *dom, xen_pfn_t first,
|
||||
xen_pfn_t count);
|
||||
+void *xc_dom_pfn_to_ptr_retcount(struct xc_dom_image *dom, xen_pfn_t first,
|
||||
+ xen_pfn_t count, xen_pfn_t *count_out);
|
||||
void xc_dom_unmap_one(struct xc_dom_image *dom, xen_pfn_t pfn);
|
||||
void xc_dom_unmap_all(struct xc_dom_image *dom);
|
||||
|
||||
@@ -302,13 +304,21 @@ static inline void *xc_dom_seg_to_ptr(struct xc_dom_image *dom,
|
||||
}
|
||||
|
||||
static inline void *xc_dom_vaddr_to_ptr(struct xc_dom_image *dom,
|
||||
- xen_vaddr_t vaddr)
|
||||
+ xen_vaddr_t vaddr,
|
||||
+ size_t *safe_region_out)
|
||||
{
|
||||
unsigned int page_size = XC_DOM_PAGE_SIZE(dom);
|
||||
xen_pfn_t page = (vaddr - dom->parms.virt_base) / page_size;
|
||||
unsigned int offset = (vaddr - dom->parms.virt_base) % page_size;
|
||||
- void *ptr = xc_dom_pfn_to_ptr(dom, page, 0);
|
||||
- return (ptr ? (ptr + offset) : NULL);
|
||||
+ xen_pfn_t safe_region_count;
|
||||
+ void *ptr;
|
||||
+
|
||||
+ *safe_region_out = 0;
|
||||
+ ptr = xc_dom_pfn_to_ptr_retcount(dom, page, 0, &safe_region_count);
|
||||
+ if ( ptr == NULL )
|
||||
+ return ptr;
|
||||
+ *safe_region_out = (safe_region_count << XC_DOM_PAGE_SHIFT(dom)) - offset;
|
||||
+ return ptr;
|
||||
}
|
||||
|
||||
static inline int xc_dom_feature_translated(struct xc_dom_image *dom)
|
||||
diff --git a/tools/libxc/xc_dom_binloader.c b/tools/libxc/xc_dom_binloader.c
|
||||
index 769e97d..bde93f7 100644
|
||||
--- a/tools/libxc/xc_dom_binloader.c
|
||||
+++ b/tools/libxc/xc_dom_binloader.c
|
||||
@@ -249,6 +249,7 @@ static int xc_dom_load_bin_kernel(struct xc_dom_image *dom)
|
||||
char *image = dom->kernel_blob;
|
||||
char *dest;
|
||||
size_t image_size = dom->kernel_size;
|
||||
+ size_t dest_size;
|
||||
uint32_t start_addr;
|
||||
uint32_t load_end_addr;
|
||||
uint32_t bss_end_addr;
|
||||
@@ -272,7 +273,15 @@ static int xc_dom_load_bin_kernel(struct xc_dom_image *dom)
|
||||
DOMPRINTF(" text_size: 0x%" PRIx32 "", text_size);
|
||||
DOMPRINTF(" bss_size: 0x%" PRIx32 "", bss_size);
|
||||
|
||||
- dest = xc_dom_vaddr_to_ptr(dom, dom->kernel_seg.vstart);
|
||||
+ dest = xc_dom_vaddr_to_ptr(dom, dom->kernel_seg.vstart, &dest_size);
|
||||
+
|
||||
+ if ( dest_size < text_size ||
|
||||
+ dest_size - text_size < bss_size )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: mapped region is too small for image", __FUNCTION__);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
memcpy(dest, image + skip, text_size);
|
||||
memset(dest + text_size, 0, bss_size);
|
||||
|
||||
diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c
|
||||
index 2a01d7c..8913e41 100644
|
||||
--- a/tools/libxc/xc_dom_core.c
|
||||
+++ b/tools/libxc/xc_dom_core.c
|
||||
@@ -351,10 +351,19 @@ int xc_dom_try_gunzip(struct xc_dom_image *dom, void **blob, size_t * size)
|
||||
void *xc_dom_pfn_to_ptr(struct xc_dom_image *dom, xen_pfn_t pfn,
|
||||
xen_pfn_t count)
|
||||
{
|
||||
+ xen_pfn_t count_out_dummy;
|
||||
+ return xc_dom_pfn_to_ptr_retcount(dom, pfn, count, &count_out_dummy);
|
||||
+}
|
||||
+
|
||||
+void *xc_dom_pfn_to_ptr_retcount(struct xc_dom_image *dom, xen_pfn_t pfn,
|
||||
+ xen_pfn_t count, xen_pfn_t *count_out)
|
||||
+{
|
||||
struct xc_dom_phys *phys;
|
||||
unsigned int page_shift = XC_DOM_PAGE_SHIFT(dom);
|
||||
char *mode = "unset";
|
||||
|
||||
+ *count_out = 0;
|
||||
+
|
||||
if ( pfn > dom->total_pages || /* multiple checks to avoid overflows */
|
||||
count > dom->total_pages ||
|
||||
pfn > dom->total_pages - count )
|
||||
@@ -384,6 +393,7 @@ void *xc_dom_pfn_to_ptr(struct xc_dom_image *dom, xen_pfn_t pfn,
|
||||
phys->count);
|
||||
return NULL;
|
||||
}
|
||||
+ *count_out = count;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -391,6 +401,9 @@ void *xc_dom_pfn_to_ptr(struct xc_dom_image *dom, xen_pfn_t pfn,
|
||||
just hand out a pointer to it */
|
||||
if ( pfn < phys->first )
|
||||
continue;
|
||||
+ if ( pfn >= phys->first + phys->count )
|
||||
+ continue;
|
||||
+ *count_out = phys->count - (pfn - phys->first);
|
||||
}
|
||||
return phys->ptr + ((pfn - phys->first) << page_shift);
|
||||
}
|
||||
diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c
|
||||
index 2e69559..031b5b6 100644
|
||||
--- a/tools/libxc/xc_dom_elfloader.c
|
||||
+++ b/tools/libxc/xc_dom_elfloader.c
|
||||
@@ -130,10 +130,11 @@ static int xc_dom_load_elf_symtab(struct xc_dom_image *dom,
|
||||
|
||||
if ( load )
|
||||
{
|
||||
+ size_t allow_size; /* will be used in a forthcoming XSA-55 patch */
|
||||
if ( !dom->bsd_symtab_start )
|
||||
return 0;
|
||||
size = dom->kernel_seg.vend - dom->bsd_symtab_start;
|
||||
- hdr = xc_dom_vaddr_to_ptr(dom, dom->bsd_symtab_start);
|
||||
+ hdr = xc_dom_vaddr_to_ptr(dom, dom->bsd_symtab_start, &allow_size);
|
||||
*(int *)hdr = size - sizeof(int);
|
||||
}
|
||||
else
|
||||
--
|
||||
1.7.2.5
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
From 035634047d10c678cbb8801c4263747bdaf4e5b1 Mon Sep 17 00:00:00 2001
|
||||
From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Date: Fri, 14 Jun 2013 16:43:16 +0100
|
||||
Subject: [PATCH 04/23] libelf: add `struct elf_binary*' parameter to elf_load_image
|
||||
|
||||
The meat of this function is going to need a copy of the elf pointer,
|
||||
in forthcoming patches.
|
||||
|
||||
No functional change in this patch.
|
||||
|
||||
This is part of the fix to a security issue, XSA-55.
|
||||
|
||||
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
---
|
||||
xen/common/libelf/libelf-loader.c | 8 +++++---
|
||||
1 files changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/xen/common/libelf/libelf-loader.c b/xen/common/libelf/libelf-loader.c
|
||||
index ab58b8b..0559d88 100644
|
||||
--- a/xen/common/libelf/libelf-loader.c
|
||||
+++ b/xen/common/libelf/libelf-loader.c
|
||||
@@ -108,7 +108,8 @@ void elf_set_log(struct elf_binary *elf, elf_log_callback *log_callback,
|
||||
elf->verbose = verbose;
|
||||
}
|
||||
|
||||
-static int elf_load_image(void *dst, const void *src, uint64_t filesz, uint64_t memsz)
|
||||
+static int elf_load_image(struct elf_binary *elf,
|
||||
+ void *dst, const void *src, uint64_t filesz, uint64_t memsz)
|
||||
{
|
||||
memcpy(dst, src, filesz);
|
||||
memset(dst + filesz, 0, memsz - filesz);
|
||||
@@ -122,7 +123,8 @@ void elf_set_verbose(struct elf_binary *elf)
|
||||
elf->verbose = 1;
|
||||
}
|
||||
|
||||
-static int elf_load_image(void *dst, const void *src, uint64_t filesz, uint64_t memsz)
|
||||
+static int elf_load_image(struct elf_binary *elf,
|
||||
+ void *dst, const void *src, uint64_t filesz, uint64_t memsz)
|
||||
{
|
||||
int rc;
|
||||
if ( filesz > ULONG_MAX || memsz > ULONG_MAX )
|
||||
@@ -279,7 +281,7 @@ int elf_load_binary(struct elf_binary *elf)
|
||||
dest = elf_get_ptr(elf, paddr);
|
||||
elf_msg(elf, "%s: phdr %" PRIu64 " at 0x%p -> 0x%p\n",
|
||||
__func__, i, dest, dest + filesz);
|
||||
- if ( elf_load_image(dest, elf->image + offset, filesz, memsz) != 0 )
|
||||
+ if ( elf_load_image(elf, dest, elf->image + offset, filesz, memsz) != 0 )
|
||||
return -1;
|
||||
}
|
||||
|
||||
--
|
||||
1.7.2.5
|
||||
|
|
@ -1,174 +0,0 @@
|
|||
From 83ec905922b496e1a5756e3a88405eb6c2c6ba88 Mon Sep 17 00:00:00 2001
|
||||
From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Date: Fri, 14 Jun 2013 16:43:16 +0100
|
||||
Subject: [PATCH 05/23] libelf: abolish elf_sval and elf_access_signed
|
||||
|
||||
These are not used anywhere.
|
||||
|
||||
This is part of the fix to a security issue, XSA-55.
|
||||
|
||||
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
---
|
||||
xen/common/libelf/libelf-tools.c | 28 ----------------------------
|
||||
xen/include/xen/libelf.h | 11 -----------
|
||||
2 files changed, 0 insertions(+), 39 deletions(-)
|
||||
|
||||
diff --git a/xen/common/libelf/libelf-tools.c b/xen/common/libelf/libelf-tools.c
|
||||
index cb97908..2f54142 100644
|
||||
--- a/xen/common/libelf/libelf-tools.c
|
||||
+++ b/xen/common/libelf/libelf-tools.c
|
||||
@@ -48,34 +48,6 @@ uint64_t elf_access_unsigned(struct elf_binary * elf, const void *ptr,
|
||||
}
|
||||
}
|
||||
|
||||
-int64_t elf_access_signed(struct elf_binary *elf, const void *ptr,
|
||||
- uint64_t offset, size_t size)
|
||||
-{
|
||||
- int need_swap = elf_swap(elf);
|
||||
- const int8_t *s8;
|
||||
- const int16_t *s16;
|
||||
- const int32_t *s32;
|
||||
- const int64_t *s64;
|
||||
-
|
||||
- switch ( size )
|
||||
- {
|
||||
- case 1:
|
||||
- s8 = ptr + offset;
|
||||
- return *s8;
|
||||
- case 2:
|
||||
- s16 = ptr + offset;
|
||||
- return need_swap ? bswap_16(*s16) : *s16;
|
||||
- case 4:
|
||||
- s32 = ptr + offset;
|
||||
- return need_swap ? bswap_32(*s32) : *s32;
|
||||
- case 8:
|
||||
- s64 = ptr + offset;
|
||||
- return need_swap ? bswap_64(*s64) : *s64;
|
||||
- default:
|
||||
- return 0;
|
||||
- }
|
||||
-}
|
||||
-
|
||||
uint64_t elf_round_up(struct elf_binary *elf, uint64_t addr)
|
||||
{
|
||||
int elf_round = (elf_64bit(elf) ? 8 : 4) - 1;
|
||||
diff --git a/xen/include/xen/libelf.h b/xen/include/xen/libelf.h
|
||||
index e8f6508..38e490c 100644
|
||||
--- a/xen/include/xen/libelf.h
|
||||
+++ b/xen/include/xen/libelf.h
|
||||
@@ -136,23 +136,12 @@ struct elf_binary {
|
||||
offsetof(typeof(*(str)),e32.elem), \
|
||||
sizeof((str)->e32.elem)))
|
||||
|
||||
-#define elf_sval(elf, str, elem) \
|
||||
- ((ELFCLASS64 == (elf)->class) \
|
||||
- ? elf_access_signed((elf), (str), \
|
||||
- offsetof(typeof(*(str)),e64.elem), \
|
||||
- sizeof((str)->e64.elem)) \
|
||||
- : elf_access_signed((elf), (str), \
|
||||
- offsetof(typeof(*(str)),e32.elem), \
|
||||
- sizeof((str)->e32.elem)))
|
||||
-
|
||||
#define elf_size(elf, str) \
|
||||
((ELFCLASS64 == (elf)->class) \
|
||||
? sizeof((str)->e64) : sizeof((str)->e32))
|
||||
|
||||
uint64_t elf_access_unsigned(struct elf_binary *elf, const void *ptr,
|
||||
uint64_t offset, size_t size);
|
||||
-int64_t elf_access_signed(struct elf_binary *elf, const void *ptr,
|
||||
- uint64_t offset, size_t size);
|
||||
|
||||
uint64_t elf_round_up(struct elf_binary *elf, uint64_t addr);
|
||||
|
||||
--
|
||||
1.7.2.5
|
||||
#From 682a04488e7b3bd6c3448ab60599566eb7c6177a Mon Sep 17 00:00:00 2001
|
||||
#From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
#Date: Fri, 14 Jun 2013 16:43:16 +0100
|
||||
#Subject: [PATCH 06/23] libelf: move include of <asm/guest_access.h> to top of file
|
||||
#
|
||||
#libelf-loader.c #includes <asm/guest_access.h>, when being compiled
|
||||
#for Xen. Currently it does this in the middle of the file.
|
||||
#
|
||||
#Move this #include to the top of the file, before libelf-private.h.
|
||||
#This is necessary because in forthcoming patches we will introduce
|
||||
#private #defines of memcpy etc. which would interfere with definitions
|
||||
#in headers #included from guest_access.h.
|
||||
#
|
||||
#No semantic or functional change in this patch.
|
||||
#
|
||||
#This is part of the fix to a security issue, XSA-55.
|
||||
#
|
||||
#Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
#Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
#Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
#---
|
||||
# xen/common/libelf/libelf-loader.c | 5 ++++-
|
||||
# 1 files changed, 4 insertions(+), 1 deletions(-)
|
||||
#
|
||||
diff --git a/xen/common/libelf/libelf-loader.c b/xen/common/libelf/libelf-loader.c
|
||||
index 0559d88..ec0706b 100644
|
||||
--- a/xen/common/libelf/libelf-loader.c
|
||||
+++ b/xen/common/libelf/libelf-loader.c
|
||||
@@ -16,6 +16,10 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
+#ifdef __XEN__
|
||||
+#include <asm/guest_access.h>
|
||||
+#endif
|
||||
+
|
||||
#include "libelf-private.h"
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
@@ -116,7 +120,6 @@ static int elf_load_image(struct elf_binary *elf,
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
-#include <asm/guest_access.h>
|
||||
|
||||
void elf_set_verbose(struct elf_binary *elf)
|
||||
{
|
||||
--
|
||||
1.7.2.5
|
||||
#From de9089b449d2508b1ba05590905c7ebaee00c8c4 Mon Sep 17 00:00:00 2001
|
||||
#From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
#Date: Fri, 14 Jun 2013 16:43:16 +0100
|
||||
#Subject: [PATCH 07/23] libelf/xc_dom_load_elf_symtab: Do not use "syms" uninitialised
|
||||
#
|
||||
#xc_dom_load_elf_symtab (with load==0) calls elf_round_up, but it
|
||||
#mistakenly used the uninitialised variable "syms" when calculating
|
||||
#dom->bsd_symtab_start. This should be a reference to "elf".
|
||||
#
|
||||
#This change might have the effect of rounding the value differently.
|
||||
#Previously if the uninitialised value (a single byte on the stack) was
|
||||
#ELFCLASS64 (ie, 2), the alignment would be to 8 bytes, otherwise to 4.
|
||||
#
|
||||
#However, the value is calculated from dom->kernel_seg.vend so this
|
||||
#could only make a difference if that value wasn't already aligned to 8
|
||||
#bytes.
|
||||
#
|
||||
#This is part of the fix to a security issue, XSA-55.
|
||||
#
|
||||
#Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
#Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
#---
|
||||
# tools/libxc/xc_dom_elfloader.c | 2 +-
|
||||
# 1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
#
|
||||
diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c
|
||||
index 031b5b6..e82f6e9 100644
|
||||
--- a/tools/libxc/xc_dom_elfloader.c
|
||||
+++ b/tools/libxc/xc_dom_elfloader.c
|
||||
@@ -144,7 +144,7 @@ static int xc_dom_load_elf_symtab(struct xc_dom_image *dom,
|
||||
hdr = xc_dom_malloc(dom, size);
|
||||
if ( hdr == NULL )
|
||||
return 0;
|
||||
- dom->bsd_symtab_start = elf_round_up(&syms, dom->kernel_seg.vend);
|
||||
+ dom->bsd_symtab_start = elf_round_up(elf, dom->kernel_seg.vend);
|
||||
}
|
||||
|
||||
memcpy(hdr + sizeof(int),
|
||||
--
|
||||
1.7.2.5
|
|
@ -1,252 +0,0 @@
|
|||
From 3fb6ccf2faccaf5e22e33a3155ccc72d732896d8 Mon Sep 17 00:00:00 2001
|
||||
From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Date: Fri, 14 Jun 2013 16:43:18 +0100
|
||||
Subject: [PATCH 14/23] libelf: use C99 bool for booleans
|
||||
|
||||
We want to remove uses of "int" because signed integers have
|
||||
undesirable undefined behaviours on overflow. Malicious compilers can
|
||||
turn apparently-correct code into code with security vulnerabilities
|
||||
etc.
|
||||
|
||||
In this patch we change all the booleans in libelf to C99 bool,
|
||||
from <stdbool.h>.
|
||||
|
||||
For the one visible libelf boolean in libxc's public interface we
|
||||
retain the use of int to avoid changing the ABI; libxc converts it to
|
||||
a bool for consumption by libelf.
|
||||
|
||||
It is OK to change all values only ever used as booleans to _Bool
|
||||
(bool) because conversion from any scalar type to a _Bool works the
|
||||
same as the boolean test in if() or ?: and is always defined (C99
|
||||
6.3.1.2). But we do need to check that all these variables really are
|
||||
only ever used that way. (It is theoretically possible that the old
|
||||
code truncated some 64-bit values to 32-bit ints which might become
|
||||
zero depending on the value, which would mean a behavioural change in
|
||||
this patch, but it seems implausible that treating 0x????????00000000
|
||||
as false could have been intended.)
|
||||
|
||||
This is part of the fix to a security issue, XSA-55.
|
||||
|
||||
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Acked-by: George Dunlap <george.dunlap@eu.citrix.com>
|
||||
---
|
||||
tools/libxc/xc_dom_elfloader.c | 8 ++++----
|
||||
xen/common/libelf/libelf-dominfo.c | 2 +-
|
||||
xen/common/libelf/libelf-loader.c | 4 ++--
|
||||
xen/common/libelf/libelf-private.h | 2 +-
|
||||
xen/common/libelf/libelf-tools.c | 10 +++++-----
|
||||
xen/include/xen/libelf.h | 18 ++++++++++--------
|
||||
6 files changed, 23 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c
|
||||
index 4fb4da2..9ba64ae 100644
|
||||
--- a/tools/libxc/xc_dom_elfloader.c
|
||||
+++ b/tools/libxc/xc_dom_elfloader.c
|
||||
@@ -34,7 +34,7 @@
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
static void log_callback(struct elf_binary *elf, void *caller_data,
|
||||
- int iserr, const char *fmt, va_list al) {
|
||||
+ bool iserr, const char *fmt, va_list al) {
|
||||
xc_interface *xch = caller_data;
|
||||
|
||||
xc_reportv(xch,
|
||||
@@ -46,7 +46,7 @@ static void log_callback(struct elf_binary *elf, void *caller_data,
|
||||
|
||||
void xc_elf_set_logfile(xc_interface *xch, struct elf_binary *elf,
|
||||
int verbose) {
|
||||
- elf_set_log(elf, log_callback, xch, verbose);
|
||||
+ elf_set_log(elf, log_callback, xch, verbose /* convert to bool */);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
@@ -84,7 +84,7 @@ static char *xc_dom_guest_type(struct xc_dom_image *dom,
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* parse elf binary */
|
||||
|
||||
-static int check_elf_kernel(struct xc_dom_image *dom, int verbose)
|
||||
+static int check_elf_kernel(struct xc_dom_image *dom, bool verbose)
|
||||
{
|
||||
if ( dom->kernel_blob == NULL )
|
||||
{
|
||||
@@ -112,7 +112,7 @@ static int xc_dom_probe_elf_kernel(struct xc_dom_image *dom)
|
||||
}
|
||||
|
||||
static int xc_dom_load_elf_symtab(struct xc_dom_image *dom,
|
||||
- struct elf_binary *elf, int load)
|
||||
+ struct elf_binary *elf, bool load)
|
||||
{
|
||||
struct elf_binary syms;
|
||||
ELF_HANDLE_DECL_NONCONST(elf_shdr) shdr; ELF_HANDLE_DECL(elf_shdr) shdr2;
|
||||
diff --git a/xen/common/libelf/libelf-dominfo.c b/xen/common/libelf/libelf-dominfo.c
|
||||
index 98c80dc..12b6c2a 100644
|
||||
--- a/xen/common/libelf/libelf-dominfo.c
|
||||
+++ b/xen/common/libelf/libelf-dominfo.c
|
||||
@@ -101,7 +101,7 @@ int elf_xen_parse_note(struct elf_binary *elf,
|
||||
/* *INDENT-OFF* */
|
||||
static const struct {
|
||||
char *name;
|
||||
- int str;
|
||||
+ bool str;
|
||||
} note_desc[] = {
|
||||
[XEN_ELFNOTE_ENTRY] = { "ENTRY", 0},
|
||||
[XEN_ELFNOTE_HYPERCALL_PAGE] = { "HYPERCALL_PAGE", 0},
|
||||
diff --git a/xen/common/libelf/libelf-loader.c b/xen/common/libelf/libelf-loader.c
|
||||
index f8be635..0dccd4d 100644
|
||||
--- a/xen/common/libelf/libelf-loader.c
|
||||
+++ b/xen/common/libelf/libelf-loader.c
|
||||
@@ -92,7 +92,7 @@ int elf_init(struct elf_binary *elf, const char *image_input, size_t size)
|
||||
}
|
||||
|
||||
#ifndef __XEN__
|
||||
-void elf_call_log_callback(struct elf_binary *elf, int iserr,
|
||||
+void elf_call_log_callback(struct elf_binary *elf, bool iserr,
|
||||
const char *fmt,...) {
|
||||
va_list al;
|
||||
|
||||
@@ -107,7 +107,7 @@ void elf_call_log_callback(struct elf_binary *elf, int iserr,
|
||||
}
|
||||
|
||||
void elf_set_log(struct elf_binary *elf, elf_log_callback *log_callback,
|
||||
- void *log_caller_data, int verbose)
|
||||
+ void *log_caller_data, bool verbose)
|
||||
{
|
||||
elf->log_callback = log_callback;
|
||||
elf->log_caller_data = log_caller_data;
|
||||
diff --git a/xen/common/libelf/libelf-private.h b/xen/common/libelf/libelf-private.h
|
||||
index 280dfd1..277be04 100644
|
||||
--- a/xen/common/libelf/libelf-private.h
|
||||
+++ b/xen/common/libelf/libelf-private.h
|
||||
@@ -77,7 +77,7 @@
|
||||
#define elf_err(elf, fmt, args ... ) \
|
||||
elf_call_log_callback(elf, 1, fmt , ## args );
|
||||
|
||||
-void elf_call_log_callback(struct elf_binary*, int iserr, const char *fmt,...);
|
||||
+void elf_call_log_callback(struct elf_binary*, bool iserr, const char *fmt,...);
|
||||
|
||||
#define safe_strcpy(d,s) \
|
||||
do { strncpy((d),(s),sizeof((d))-1); \
|
||||
diff --git a/xen/common/libelf/libelf-tools.c b/xen/common/libelf/libelf-tools.c
|
||||
index 744027e..fa58f76 100644
|
||||
--- a/xen/common/libelf/libelf-tools.c
|
||||
+++ b/xen/common/libelf/libelf-tools.c
|
||||
@@ -31,7 +31,7 @@ const char *elf_check_broken(const struct elf_binary *elf)
|
||||
return elf->broken;
|
||||
}
|
||||
|
||||
-static int elf_ptrval_in_range(elf_ptrval ptrval, uint64_t size,
|
||||
+static bool elf_ptrval_in_range(elf_ptrval ptrval, uint64_t size,
|
||||
const void *region, uint64_t regionsize)
|
||||
/*
|
||||
* Returns true if the putative memory area [ptrval,ptrval+size>
|
||||
@@ -53,7 +53,7 @@ static int elf_ptrval_in_range(elf_ptrval ptrval, uint64_t size,
|
||||
return 1;
|
||||
}
|
||||
|
||||
-int elf_access_ok(struct elf_binary * elf,
|
||||
+bool elf_access_ok(struct elf_binary * elf,
|
||||
uint64_t ptrval, size_t size)
|
||||
{
|
||||
if ( elf_ptrval_in_range(ptrval, size, elf->image_base, elf->size) )
|
||||
@@ -92,7 +92,7 @@ uint64_t elf_access_unsigned(struct elf_binary * elf, elf_ptrval base,
|
||||
uint64_t moreoffset, size_t size)
|
||||
{
|
||||
elf_ptrval ptrval = base + moreoffset;
|
||||
- int need_swap = elf_swap(elf);
|
||||
+ bool need_swap = elf_swap(elf);
|
||||
const uint8_t *u8;
|
||||
const uint16_t *u16;
|
||||
const uint32_t *u32;
|
||||
@@ -332,7 +332,7 @@ ELF_HANDLE_DECL(elf_note) elf_note_next(struct elf_binary *elf, ELF_HANDLE_DECL(
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
-int elf_is_elfbinary(const void *image_start, size_t image_size)
|
||||
+bool elf_is_elfbinary(const void *image_start, size_t image_size)
|
||||
{
|
||||
const Elf32_Ehdr *ehdr = image_start;
|
||||
|
||||
@@ -342,7 +342,7 @@ int elf_is_elfbinary(const void *image_start, size_t image_size)
|
||||
return IS_ELF(*ehdr);
|
||||
}
|
||||
|
||||
-int elf_phdr_is_loadable(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr)
|
||||
+bool elf_phdr_is_loadable(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr)
|
||||
{
|
||||
uint64_t p_type = elf_uval(elf, phdr, p_type);
|
||||
uint64_t p_flags = elf_uval(elf, phdr, p_flags);
|
||||
diff --git a/xen/include/xen/libelf.h b/xen/include/xen/libelf.h
|
||||
index ac93858..951430f 100644
|
||||
--- a/xen/include/xen/libelf.h
|
||||
+++ b/xen/include/xen/libelf.h
|
||||
@@ -29,6 +29,8 @@
|
||||
#error define architectural endianness
|
||||
#endif
|
||||
|
||||
+#include <stdbool.h>
|
||||
+
|
||||
#undef ELFSIZE
|
||||
#include "elfstructs.h"
|
||||
#ifdef __XEN__
|
||||
@@ -42,7 +44,7 @@
|
||||
|
||||
struct elf_binary;
|
||||
typedef void elf_log_callback(struct elf_binary*, void *caller_data,
|
||||
- int iserr, const char *fmt, va_list al);
|
||||
+ bool iserr, const char *fmt, va_list al);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -237,7 +239,7 @@ struct elf_binary {
|
||||
elf_log_callback *log_callback;
|
||||
void *log_caller_data;
|
||||
#endif
|
||||
- int verbose;
|
||||
+ bool verbose;
|
||||
const char *broken;
|
||||
};
|
||||
|
||||
@@ -301,8 +303,8 @@ void elf_memset_safe(struct elf_binary*, elf_ptrval dst, int c, size_t);
|
||||
* outside permitted areas.
|
||||
*/
|
||||
|
||||
-int elf_access_ok(struct elf_binary * elf,
|
||||
- uint64_t ptrval, size_t size);
|
||||
+bool elf_access_ok(struct elf_binary * elf,
|
||||
+ uint64_t ptrval, size_t size);
|
||||
|
||||
#define elf_store_val(elf, type, ptr, val) \
|
||||
({ \
|
||||
@@ -351,9 +353,9 @@ uint64_t elf_note_numeric_array(struct elf_binary *, ELF_HANDLE_DECL(elf_note),
|
||||
ELF_HANDLE_DECL(elf_note) elf_note_next(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note);
|
||||
|
||||
/* (Only) checks that the image has the right magic number. */
|
||||
-int elf_is_elfbinary(const void *image_start, size_t image_size);
|
||||
+bool elf_is_elfbinary(const void *image_start, size_t image_size);
|
||||
|
||||
-int elf_phdr_is_loadable(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr);
|
||||
+bool elf_phdr_is_loadable(struct elf_binary *elf, ELF_HANDLE_DECL(elf_phdr) phdr);
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* xc_libelf_loader.c */
|
||||
@@ -367,7 +369,7 @@ int elf_init(struct elf_binary *elf, const char *image, size_t size);
|
||||
void elf_set_verbose(struct elf_binary *elf);
|
||||
#else
|
||||
void elf_set_log(struct elf_binary *elf, elf_log_callback*,
|
||||
- void *log_caller_pointer, int verbose);
|
||||
+ void *log_caller_pointer, bool verbose);
|
||||
#endif
|
||||
|
||||
void elf_parse_binary(struct elf_binary *elf);
|
||||
@@ -419,7 +421,7 @@ struct elf_dom_parms {
|
||||
char xen_ver[16];
|
||||
char loader[16];
|
||||
int pae;
|
||||
- int bsd_symtab;
|
||||
+ bool bsd_symtab;
|
||||
uint64_t virt_base;
|
||||
uint64_t virt_entry;
|
||||
uint64_t virt_hypercall;
|
||||
--
|
||||
1.7.2.5
|
||||
|
|
@ -1,382 +0,0 @@
|
|||
From 77c0829fa751f052f7b8ec08287aef6e7ba97bc5 Mon Sep 17 00:00:00 2001
|
||||
From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Date: Fri, 14 Jun 2013 16:43:19 +0100
|
||||
Subject: [PATCH 19/23] libxc: check failure of xc_dom_*_to_ptr, xc_map_foreign_range
|
||||
|
||||
The return values from xc_dom_*_to_ptr and xc_map_foreign_range are
|
||||
sometimes dereferenced, or subjected to pointer arithmetic, without
|
||||
checking whether the relevant function failed and returned NULL.
|
||||
|
||||
Add an appropriate error check at every call site.
|
||||
|
||||
Changes in the 4.2 backport of this series:
|
||||
* Fix tools/libxc/xc_dom_x86.c:setup_pgtables_x86_32.
|
||||
* Fix tools/libxc/xc_dom_ia64.c:start_info_ia64.
|
||||
* Fix tools/libxc/ia64/xc_ia64_dom_fwloader.c:xc_dom_load_fw_kernel.
|
||||
|
||||
This is part of the fix to a security issue, XSA-55.
|
||||
|
||||
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
---
|
||||
tools/libxc/ia64/xc_ia64_dom_fwloader.c | 2 +
|
||||
tools/libxc/xc_dom_binloader.c | 6 +++
|
||||
tools/libxc/xc_dom_core.c | 6 +++
|
||||
tools/libxc/xc_dom_elfloader.c | 13 +++++++
|
||||
tools/libxc/xc_dom_ia64.c | 6 +++
|
||||
tools/libxc/xc_dom_x86.c | 55 +++++++++++++++++++++++++++++++
|
||||
tools/libxc/xc_domain_restore.c | 27 +++++++++++++++
|
||||
tools/libxc/xc_offline_page.c | 5 +++
|
||||
8 files changed, 120 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/tools/libxc/ia64/xc_ia64_dom_fwloader.c b/tools/libxc/ia64/xc_ia64_dom_fwloader.c
|
||||
index cdf3333..dbd3349 100644
|
||||
--- a/tools/libxc/ia64/xc_ia64_dom_fwloader.c
|
||||
+++ b/tools/libxc/ia64/xc_ia64_dom_fwloader.c
|
||||
@@ -60,6 +60,8 @@ static int xc_dom_load_fw_kernel(struct xc_dom_image *dom)
|
||||
unsigned long i;
|
||||
|
||||
dest = xc_dom_vaddr_to_ptr(dom, dom->kernel_seg.vstart);
|
||||
+ if ( dest == NULL )
|
||||
+ return -1;
|
||||
memcpy(dest, dom->kernel_blob, FW_SIZE);
|
||||
|
||||
/* Synchronize cache. */
|
||||
diff --git a/tools/libxc/xc_dom_binloader.c b/tools/libxc/xc_dom_binloader.c
|
||||
index 8596a28..553b366 100644
|
||||
--- a/tools/libxc/xc_dom_binloader.c
|
||||
+++ b/tools/libxc/xc_dom_binloader.c
|
||||
@@ -277,6 +277,12 @@ static int xc_dom_load_bin_kernel(struct xc_dom_image *dom)
|
||||
DOMPRINTF(" bss_size: 0x%" PRIx32 "", bss_size);
|
||||
|
||||
dest = xc_dom_vaddr_to_ptr(dom, dom->kernel_seg.vstart, &dest_size);
|
||||
+ if ( dest == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: xc_dom_vaddr_to_ptr(dom, dom->kernel_seg.vstart)"
|
||||
+ " => NULL", __FUNCTION__);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
|
||||
if ( dest_size < text_size ||
|
||||
dest_size - text_size < bss_size )
|
||||
diff --git a/tools/libxc/xc_dom_core.c b/tools/libxc/xc_dom_core.c
|
||||
index 8913e41..a54ddae 100644
|
||||
--- a/tools/libxc/xc_dom_core.c
|
||||
+++ b/tools/libxc/xc_dom_core.c
|
||||
@@ -868,6 +868,12 @@ int xc_dom_build_image(struct xc_dom_image *dom)
|
||||
ramdisklen) != 0 )
|
||||
goto err;
|
||||
ramdiskmap = xc_dom_seg_to_ptr(dom, &dom->ramdisk_seg);
|
||||
+ if ( ramdiskmap == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: xc_dom_seg_to_ptr(dom, &dom->ramdisk_seg) => NULL",
|
||||
+ __FUNCTION__);
|
||||
+ goto err;
|
||||
+ }
|
||||
if ( unziplen )
|
||||
{
|
||||
if ( xc_dom_do_gunzip(dom->xch,
|
||||
diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c
|
||||
index 9fc4b94..61b5798 100644
|
||||
--- a/tools/libxc/xc_dom_elfloader.c
|
||||
+++ b/tools/libxc/xc_dom_elfloader.c
|
||||
@@ -139,6 +139,12 @@ static elf_errorstatus xc_dom_load_elf_symtab(struct xc_dom_image *dom,
|
||||
return 0;
|
||||
size = dom->kernel_seg.vend - dom->bsd_symtab_start;
|
||||
hdr_ptr = xc_dom_vaddr_to_ptr(dom, dom->bsd_symtab_start, &allow_size);
|
||||
+ if ( hdr_ptr == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s/load: xc_dom_vaddr_to_ptr(dom,dom->bsd_symtab_start"
|
||||
+ " => NULL", __FUNCTION__);
|
||||
+ return -1;
|
||||
+ }
|
||||
elf->caller_xdest_base = hdr_ptr;
|
||||
elf->caller_xdest_size = allow_size;
|
||||
hdr = ELF_REALPTR2PTRVAL(hdr_ptr);
|
||||
@@ -384,7 +390,14 @@ static elf_errorstatus xc_dom_load_elf_kernel(struct xc_dom_image *dom)
|
||||
xen_pfn_t pages;
|
||||
|
||||
elf->dest_base = xc_dom_seg_to_ptr_pages(dom, &dom->kernel_seg, &pages);
|
||||
+ if ( elf->dest_base == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: xc_dom_vaddr_to_ptr(dom,dom->kernel_seg)"
|
||||
+ " => NULL", __FUNCTION__);
|
||||
+ return -1;
|
||||
+ }
|
||||
elf->dest_size = pages * XC_DOM_PAGE_SIZE(dom);
|
||||
+
|
||||
rc = elf_load_binary(elf);
|
||||
if ( rc < 0 )
|
||||
{
|
||||
diff --git a/tools/libxc/xc_dom_ia64.c b/tools/libxc/xc_dom_ia64.c
|
||||
index dcd1523..7c0eff1 100644
|
||||
--- a/tools/libxc/xc_dom_ia64.c
|
||||
+++ b/tools/libxc/xc_dom_ia64.c
|
||||
@@ -60,6 +60,12 @@ int start_info_ia64(struct xc_dom_image *dom)
|
||||
|
||||
DOMPRINTF_CALLED(dom->xch);
|
||||
|
||||
+ if ( start_info == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: xc_dom_pfn_to_ptr failed on start_info", __FUNCTION__);
|
||||
+ return -1; /* our caller throws away our return value :-/ */
|
||||
+ }
|
||||
+
|
||||
memset(start_info, 0, sizeof(*start_info));
|
||||
sprintf(start_info->magic, dom->guest_type);
|
||||
start_info->flags = dom->flags;
|
||||
diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c
|
||||
index 0cf1687..75d6b83 100644
|
||||
--- a/tools/libxc/xc_dom_x86.c
|
||||
+++ b/tools/libxc/xc_dom_x86.c
|
||||
@@ -144,6 +144,9 @@ static int setup_pgtables_x86_32(struct xc_dom_image *dom)
|
||||
xen_vaddr_t addr;
|
||||
xen_pfn_t pgpfn;
|
||||
|
||||
+ if ( l2tab == NULL )
|
||||
+ goto pfn_error;
|
||||
+
|
||||
for ( addr = dom->parms.virt_base; addr < dom->virt_pgtab_end;
|
||||
addr += PAGE_SIZE_X86 )
|
||||
{
|
||||
@@ -151,6 +154,8 @@ static int setup_pgtables_x86_32(struct xc_dom_image *dom)
|
||||
{
|
||||
/* get L1 tab, make L2 entry */
|
||||
l1tab = xc_dom_pfn_to_ptr(dom, l1pfn, 1);
|
||||
+ if ( l1tab == NULL )
|
||||
+ goto pfn_error;
|
||||
l2off = l2_table_offset_i386(addr);
|
||||
l2tab[l2off] =
|
||||
pfn_to_paddr(xc_dom_p2m_guest(dom, l1pfn)) | L2_PROT;
|
||||
@@ -169,6 +174,11 @@ static int setup_pgtables_x86_32(struct xc_dom_image *dom)
|
||||
l1tab = NULL;
|
||||
}
|
||||
return 0;
|
||||
+
|
||||
+pfn_error:
|
||||
+ xc_dom_panic(dom->xch, XC_INTERNAL_ERROR,
|
||||
+ "%s: xc_dom_pfn_to_ptr failed", __FUNCTION__);
|
||||
+ return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -219,6 +229,12 @@ static xen_pfn_t move_l3_below_4G(struct xc_dom_image *dom,
|
||||
goto out;
|
||||
|
||||
l3tab = xc_dom_pfn_to_ptr(dom, l3pfn, 1);
|
||||
+ if ( l3tab == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: xc_dom_pfn_to_ptr(dom, l3pfn, 1) => NULL",
|
||||
+ __FUNCTION__);
|
||||
+ return l3mfn; /* our one call site will call xc_dom_panic and fail */
|
||||
+ }
|
||||
memset(l3tab, 0, XC_DOM_PAGE_SIZE(dom));
|
||||
|
||||
DOMPRINTF("%s: successfully relocated L3 below 4G. "
|
||||
@@ -262,6 +278,8 @@ static int setup_pgtables_x86_32_pae(struct xc_dom_image *dom)
|
||||
}
|
||||
|
||||
l3tab = xc_dom_pfn_to_ptr(dom, l3pfn, 1);
|
||||
+ if ( l3tab == NULL )
|
||||
+ goto pfn_error;
|
||||
|
||||
for ( addr = dom->parms.virt_base; addr < dom->virt_pgtab_end;
|
||||
addr += PAGE_SIZE_X86 )
|
||||
@@ -270,6 +288,8 @@ static int setup_pgtables_x86_32_pae(struct xc_dom_image *dom)
|
||||
{
|
||||
/* get L2 tab, make L3 entry */
|
||||
l2tab = xc_dom_pfn_to_ptr(dom, l2pfn, 1);
|
||||
+ if ( l2tab == NULL )
|
||||
+ goto pfn_error;
|
||||
l3off = l3_table_offset_pae(addr);
|
||||
l3tab[l3off] =
|
||||
pfn_to_paddr(xc_dom_p2m_guest(dom, l2pfn)) | L3_PROT;
|
||||
@@ -280,6 +300,8 @@ static int setup_pgtables_x86_32_pae(struct xc_dom_image *dom)
|
||||
{
|
||||
/* get L1 tab, make L2 entry */
|
||||
l1tab = xc_dom_pfn_to_ptr(dom, l1pfn, 1);
|
||||
+ if ( l1tab == NULL )
|
||||
+ goto pfn_error;
|
||||
l2off = l2_table_offset_pae(addr);
|
||||
l2tab[l2off] =
|
||||
pfn_to_paddr(xc_dom_p2m_guest(dom, l1pfn)) | L2_PROT;
|
||||
@@ -306,6 +328,11 @@ static int setup_pgtables_x86_32_pae(struct xc_dom_image *dom)
|
||||
l3tab[3] = pfn_to_paddr(xc_dom_p2m_guest(dom, l2pfn)) | L3_PROT;
|
||||
}
|
||||
return 0;
|
||||
+
|
||||
+pfn_error:
|
||||
+ xc_dom_panic(dom->xch, XC_INTERNAL_ERROR,
|
||||
+ "%s: xc_dom_pfn_to_ptr failed", __FUNCTION__);
|
||||
+ return -EINVAL;
|
||||
}
|
||||
|
||||
#undef L1_PROT
|
||||
@@ -344,6 +371,9 @@ static int setup_pgtables_x86_64(struct xc_dom_image *dom)
|
||||
uint64_t addr;
|
||||
xen_pfn_t pgpfn;
|
||||
|
||||
+ if ( l4tab == NULL )
|
||||
+ goto pfn_error;
|
||||
+
|
||||
for ( addr = dom->parms.virt_base; addr < dom->virt_pgtab_end;
|
||||
addr += PAGE_SIZE_X86 )
|
||||
{
|
||||
@@ -351,6 +381,8 @@ static int setup_pgtables_x86_64(struct xc_dom_image *dom)
|
||||
{
|
||||
/* get L3 tab, make L4 entry */
|
||||
l3tab = xc_dom_pfn_to_ptr(dom, l3pfn, 1);
|
||||
+ if ( l3tab == NULL )
|
||||
+ goto pfn_error;
|
||||
l4off = l4_table_offset_x86_64(addr);
|
||||
l4tab[l4off] =
|
||||
pfn_to_paddr(xc_dom_p2m_guest(dom, l3pfn)) | L4_PROT;
|
||||
@@ -361,6 +393,8 @@ static int setup_pgtables_x86_64(struct xc_dom_image *dom)
|
||||
{
|
||||
/* get L2 tab, make L3 entry */
|
||||
l2tab = xc_dom_pfn_to_ptr(dom, l2pfn, 1);
|
||||
+ if ( l2tab == NULL )
|
||||
+ goto pfn_error;
|
||||
l3off = l3_table_offset_x86_64(addr);
|
||||
l3tab[l3off] =
|
||||
pfn_to_paddr(xc_dom_p2m_guest(dom, l2pfn)) | L3_PROT;
|
||||
@@ -373,6 +407,8 @@ static int setup_pgtables_x86_64(struct xc_dom_image *dom)
|
||||
{
|
||||
/* get L1 tab, make L2 entry */
|
||||
l1tab = xc_dom_pfn_to_ptr(dom, l1pfn, 1);
|
||||
+ if ( l1tab == NULL )
|
||||
+ goto pfn_error;
|
||||
l2off = l2_table_offset_x86_64(addr);
|
||||
l2tab[l2off] =
|
||||
pfn_to_paddr(xc_dom_p2m_guest(dom, l1pfn)) | L2_PROT;
|
||||
@@ -393,6 +429,11 @@ static int setup_pgtables_x86_64(struct xc_dom_image *dom)
|
||||
l1tab = NULL;
|
||||
}
|
||||
return 0;
|
||||
+
|
||||
+pfn_error:
|
||||
+ xc_dom_panic(dom->xch, XC_INTERNAL_ERROR,
|
||||
+ "%s: xc_dom_pfn_to_ptr failed", __FUNCTION__);
|
||||
+ return -EINVAL;
|
||||
}
|
||||
|
||||
#undef L1_PROT
|
||||
@@ -410,6 +451,8 @@ static int alloc_magic_pages(struct xc_dom_image *dom)
|
||||
if ( xc_dom_alloc_segment(dom, &dom->p2m_seg, "phys2mach", 0, p2m_size) )
|
||||
return -1;
|
||||
dom->p2m_guest = xc_dom_seg_to_ptr(dom, &dom->p2m_seg);
|
||||
+ if ( dom->p2m_guest == NULL )
|
||||
+ return -1;
|
||||
|
||||
/* allocate special pages */
|
||||
dom->start_info_pfn = xc_dom_alloc_page(dom, "start info");
|
||||
@@ -434,6 +477,12 @@ static int start_info_x86_32(struct xc_dom_image *dom)
|
||||
|
||||
DOMPRINTF_CALLED(dom->xch);
|
||||
|
||||
+ if ( start_info == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: xc_dom_pfn_to_ptr failed on start_info", __FUNCTION__);
|
||||
+ return -1; /* our caller throws away our return value :-/ */
|
||||
+ }
|
||||
+
|
||||
memset(start_info, 0, sizeof(*start_info));
|
||||
strncpy(start_info->magic, dom->guest_type, sizeof(start_info->magic));
|
||||
start_info->magic[sizeof(start_info->magic) - 1] = '\0';
|
||||
@@ -474,6 +523,12 @@ static int start_info_x86_64(struct xc_dom_image *dom)
|
||||
|
||||
DOMPRINTF_CALLED(dom->xch);
|
||||
|
||||
+ if ( start_info == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: xc_dom_pfn_to_ptr failed on start_info", __FUNCTION__);
|
||||
+ return -1; /* our caller throws away our return value :-/ */
|
||||
+ }
|
||||
+
|
||||
memset(start_info, 0, sizeof(*start_info));
|
||||
strncpy(start_info->magic, dom->guest_type, sizeof(start_info->magic));
|
||||
start_info->magic[sizeof(start_info->magic) - 1] = '\0';
|
||||
diff --git a/tools/libxc/xc_domain_restore.c b/tools/libxc/xc_domain_restore.c
|
||||
index b4c0b10..3994f8f 100644
|
||||
--- a/tools/libxc/xc_domain_restore.c
|
||||
+++ b/tools/libxc/xc_domain_restore.c
|
||||
@@ -1556,6 +1556,12 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
|
||||
mfn = ctx->p2m[pfn];
|
||||
buf = xc_map_foreign_range(xch, dom, PAGE_SIZE,
|
||||
PROT_READ | PROT_WRITE, mfn);
|
||||
+ if ( buf == NULL )
|
||||
+ {
|
||||
+ ERROR("xc_map_foreign_range for generation id"
|
||||
+ " buffer failed");
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
generationid = *(unsigned long long *)(buf + offset);
|
||||
*(unsigned long long *)(buf + offset) = generationid + 1;
|
||||
@@ -1713,6 +1719,11 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
|
||||
l3tab = (uint64_t *)
|
||||
xc_map_foreign_range(xch, dom, PAGE_SIZE,
|
||||
PROT_READ, ctx->p2m[i]);
|
||||
+ if ( l3tab == NULL )
|
||||
+ {
|
||||
+ PERROR("xc_map_foreign_range failed (for l3tab)");
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
for ( j = 0; j < 4; j++ )
|
||||
l3ptes[j] = l3tab[j];
|
||||
@@ -1739,6 +1750,11 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
|
||||
l3tab = (uint64_t *)
|
||||
xc_map_foreign_range(xch, dom, PAGE_SIZE,
|
||||
PROT_READ | PROT_WRITE, ctx->p2m[i]);
|
||||
+ if ( l3tab == NULL )
|
||||
+ {
|
||||
+ PERROR("xc_map_foreign_range failed (for l3tab, 2nd)");
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
for ( j = 0; j < 4; j++ )
|
||||
l3tab[j] = l3ptes[j];
|
||||
@@ -1909,6 +1925,12 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
|
||||
SET_FIELD(ctxt, user_regs.edx, mfn);
|
||||
start_info = xc_map_foreign_range(
|
||||
xch, dom, PAGE_SIZE, PROT_READ | PROT_WRITE, mfn);
|
||||
+ if ( start_info == NULL )
|
||||
+ {
|
||||
+ PERROR("xc_map_foreign_range failed (for start_info)");
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
SET_FIELD(start_info, nr_pages, dinfo->p2m_size);
|
||||
SET_FIELD(start_info, shared_info, shared_info_frame<<PAGE_SHIFT);
|
||||
SET_FIELD(start_info, flags, 0);
|
||||
@@ -2056,6 +2078,11 @@ int xc_domain_restore(xc_interface *xch, int io_fd, uint32_t dom,
|
||||
/* Restore contents of shared-info page. No checking needed. */
|
||||
new_shared_info = xc_map_foreign_range(
|
||||
xch, dom, PAGE_SIZE, PROT_WRITE, shared_info_frame);
|
||||
+ if ( new_shared_info == NULL )
|
||||
+ {
|
||||
+ PERROR("xc_map_foreign_range failed (for new_shared_info)");
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
/* restore saved vcpu_info and arch specific info */
|
||||
MEMCPY_FIELD(new_shared_info, old_shared_info, vcpu_info);
|
||||
diff --git a/tools/libxc/xc_offline_page.c b/tools/libxc/xc_offline_page.c
|
||||
index 089a361..36b9812 100644
|
||||
--- a/tools/libxc/xc_offline_page.c
|
||||
+++ b/tools/libxc/xc_offline_page.c
|
||||
@@ -714,6 +714,11 @@ int xc_exchange_page(xc_interface *xch, int domid, xen_pfn_t mfn)
|
||||
|
||||
new_p = xc_map_foreign_range(xch, domid, PAGE_SIZE,
|
||||
PROT_READ|PROT_WRITE, new_mfn);
|
||||
+ if ( new_p == NULL )
|
||||
+ {
|
||||
+ ERROR("failed to map new_p for copy, guest may be broken?");
|
||||
+ goto failed;
|
||||
+ }
|
||||
memcpy(new_p, backup, PAGE_SIZE);
|
||||
munmap(new_p, PAGE_SIZE);
|
||||
mops.arg1.mfn = new_mfn;
|
||||
--
|
||||
1.7.2.5
|
||||
|
|
@ -1,261 +0,0 @@
|
|||
From 59f66d58180832af6b99a9e4489031b5c2f627ab Mon Sep 17 00:00:00 2001
|
||||
From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Date: Fri, 14 Jun 2013 16:43:17 +0100
|
||||
Subject: [PATCH 09/23] tools/xcutils/readnotes: adjust print_l1_mfn_valid_note
|
||||
|
||||
Use the new PTRVAL macros and elf_access_unsigned in
|
||||
print_l1_mfn_valid_note.
|
||||
|
||||
No functional change unless the input is wrong, or we are reading a
|
||||
file for a different endianness.
|
||||
|
||||
Separated out from the previous patch because this change does produce
|
||||
a difference in the generated code.
|
||||
|
||||
This is part of the fix to a security issue, XSA-55.
|
||||
|
||||
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
---
|
||||
tools/xcutils/readnotes.c | 11 ++++++-----
|
||||
1 files changed, 6 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/tools/xcutils/readnotes.c b/tools/xcutils/readnotes.c
|
||||
index 2af047d..7ff2530 100644
|
||||
--- a/tools/xcutils/readnotes.c
|
||||
+++ b/tools/xcutils/readnotes.c
|
||||
@@ -77,22 +77,23 @@ static void print_numeric_note(const char *prefix, struct elf_binary *elf,
|
||||
}
|
||||
|
||||
static void print_l1_mfn_valid_note(const char *prefix, struct elf_binary *elf,
|
||||
- const elf_note *note)
|
||||
+ ELF_HANDLE_DECL(elf_note) note)
|
||||
{
|
||||
int descsz = elf_uval(elf, note, descsz);
|
||||
- const uint32_t *desc32 = elf_note_desc(elf, note);
|
||||
- const uint64_t *desc64 = elf_note_desc(elf, note);
|
||||
+ ELF_PTRVAL_CONST_VOID desc = elf_note_desc(elf, note);
|
||||
|
||||
/* XXX should be able to cope with a list of values. */
|
||||
switch ( descsz / 2 )
|
||||
{
|
||||
case 8:
|
||||
printf("%s: mask=%#"PRIx64" value=%#"PRIx64"\n", prefix,
|
||||
- desc64[0], desc64[1]);
|
||||
+ elf_access_unsigned(elf, desc, 0, 8),
|
||||
+ elf_access_unsigned(elf, desc, 8, 8));
|
||||
break;
|
||||
case 4:
|
||||
printf("%s: mask=%#"PRIx32" value=%#"PRIx32"\n", prefix,
|
||||
- desc32[0],desc32[1]);
|
||||
+ (uint32_t)elf_access_unsigned(elf, desc, 0, 4),
|
||||
+ (uint32_t)elf_access_unsigned(elf, desc, 4, 4));
|
||||
break;
|
||||
}
|
||||
|
||||
--
|
||||
1.7.2.5
|
||||
#From db14d5bd9b6508adfcd2b910f454fae12fa4ba00 Mon Sep 17 00:00:00 2001
|
||||
#From: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
#Date: Fri, 14 Jun 2013 16:43:17 +0100
|
||||
#Subject: [PATCH 10/23] libelf: check nul-terminated strings properly
|
||||
#
|
||||
#It is not safe to simply take pointers into the ELF and use them as C
|
||||
#pointers. They might not be properly nul-terminated (and the pointers
|
||||
#might be wild).
|
||||
#
|
||||
#So we are going to introduce a new function elf_strval for safely
|
||||
#getting strings. This will check that the addresses are in range and
|
||||
#that there is a proper nul-terminated string. Of course it might
|
||||
#discover that there isn't. In that case, it will be made to fail.
|
||||
#This means that elf_note_name might fail, too.
|
||||
#
|
||||
#For the benefit of call sites which are just going to pass the value
|
||||
#to a printf-like function, we provide elf_strfmt which returns
|
||||
#"(invalid)" on failure rather than NULL.
|
||||
#
|
||||
#In this patch we introduce dummy definitions of these functions. We
|
||||
#introduce calls to elf_strval and elf_strfmt everywhere, and update
|
||||
#all the call sites with appropriate error checking.
|
||||
#
|
||||
#There is not yet any semantic change, since before this patch all the
|
||||
#places where we introduce elf_strval dereferenced the value anyway, so
|
||||
#it mustn't have been NULL.
|
||||
#
|
||||
#In future patches, when elf_strval is made able return NULL, when it
|
||||
#does so it will mark the elf "broken" so that an appropriate
|
||||
#diagnostic can be printed.
|
||||
#
|
||||
#This is part of the fix to a security issue, XSA-55.
|
||||
#
|
||||
#Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
|
||||
#Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
#Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
#---
|
||||
# tools/xcutils/readnotes.c | 11 ++++++++---
|
||||
# xen/common/libelf/libelf-dominfo.c | 13 ++++++++++---
|
||||
# xen/common/libelf/libelf-tools.c | 10 +++++++---
|
||||
# xen/include/xen/libelf.h | 7 +++++--
|
||||
# 4 files changed, 30 insertions(+), 11 deletions(-)
|
||||
#
|
||||
diff --git a/tools/xcutils/readnotes.c b/tools/xcutils/readnotes.c
|
||||
index 7ff2530..cfae994 100644
|
||||
--- a/tools/xcutils/readnotes.c
|
||||
+++ b/tools/xcutils/readnotes.c
|
||||
@@ -63,7 +63,7 @@ struct setup_header {
|
||||
static void print_string_note(const char *prefix, struct elf_binary *elf,
|
||||
ELF_HANDLE_DECL(elf_note) note)
|
||||
{
|
||||
- printf("%s: %s\n", prefix, (char*)elf_note_desc(elf, note));
|
||||
+ printf("%s: %s\n", prefix, elf_strfmt(elf, elf_note_desc(elf, note)));
|
||||
}
|
||||
|
||||
static void print_numeric_note(const char *prefix, struct elf_binary *elf,
|
||||
@@ -103,10 +103,14 @@ static int print_notes(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) start,
|
||||
{
|
||||
ELF_HANDLE_DECL(elf_note) note;
|
||||
int notes_found = 0;
|
||||
+ const char *this_note_name;
|
||||
|
||||
for ( note = start; ELF_HANDLE_PTRVAL(note) < ELF_HANDLE_PTRVAL(end); note = elf_note_next(elf, note) )
|
||||
{
|
||||
- if (0 != strcmp(elf_note_name(elf, note), "Xen"))
|
||||
+ this_note_name = elf_note_name(elf, note);
|
||||
+ if (NULL == this_note_name)
|
||||
+ continue;
|
||||
+ if (0 != strcmp(this_note_name, "Xen"))
|
||||
continue;
|
||||
|
||||
notes_found++;
|
||||
@@ -294,7 +298,8 @@ int main(int argc, char **argv)
|
||||
|
||||
shdr = elf_shdr_by_name(&elf, "__xen_guest");
|
||||
if (ELF_HANDLE_VALID(shdr))
|
||||
- printf("__xen_guest: %s\n", (char*)elf_section_start(&elf, shdr));
|
||||
+ printf("__xen_guest: %s\n",
|
||||
+ elf_strfmt(&elf, elf_section_start(&elf, shdr)));
|
||||
|
||||
return 0;
|
||||
}
|
||||
diff --git a/xen/common/libelf/libelf-dominfo.c b/xen/common/libelf/libelf-dominfo.c
|
||||
index 7140d59..b217f8f 100644
|
||||
--- a/xen/common/libelf/libelf-dominfo.c
|
||||
+++ b/xen/common/libelf/libelf-dominfo.c
|
||||
@@ -137,7 +137,10 @@ int elf_xen_parse_note(struct elf_binary *elf,
|
||||
|
||||
if ( note_desc[type].str )
|
||||
{
|
||||
- str = elf_note_desc(elf, note);
|
||||
+ str = elf_strval(elf, elf_note_desc(elf, note));
|
||||
+ if (str == NULL)
|
||||
+ /* elf_strval will mark elf broken if it fails so no need to log */
|
||||
+ return 0;
|
||||
elf_msg(elf, "%s: %s = \"%s\"\n", __FUNCTION__,
|
||||
note_desc[type].name, str);
|
||||
parms->elf_notes[type].type = XEN_ENT_STR;
|
||||
@@ -220,6 +223,7 @@ static int elf_xen_parse_notes(struct elf_binary *elf,
|
||||
{
|
||||
int xen_elfnotes = 0;
|
||||
ELF_HANDLE_DECL(elf_note) note;
|
||||
+ const char *note_name;
|
||||
|
||||
parms->elf_note_start = start;
|
||||
parms->elf_note_end = end;
|
||||
@@ -227,7 +231,10 @@ static int elf_xen_parse_notes(struct elf_binary *elf,
|
||||
ELF_HANDLE_PTRVAL(note) < parms->elf_note_end;
|
||||
note = elf_note_next(elf, note) )
|
||||
{
|
||||
- if ( strcmp(elf_note_name(elf, note), "Xen") )
|
||||
+ note_name = elf_note_name(elf, note);
|
||||
+ if ( note_name == NULL )
|
||||
+ continue;
|
||||
+ if ( strcmp(note_name, "Xen") )
|
||||
continue;
|
||||
if ( elf_xen_parse_note(elf, parms, note) )
|
||||
return -1;
|
||||
@@ -541,7 +548,7 @@ int elf_xen_parse(struct elf_binary *elf,
|
||||
parms->elf_note_start = ELF_INVALID_PTRVAL;
|
||||
parms->elf_note_end = ELF_INVALID_PTRVAL;
|
||||
elf_msg(elf, "%s: __xen_guest: \"%s\"\n", __FUNCTION__,
|
||||
- parms->guest_info);
|
||||
+ elf_strfmt(elf, parms->guest_info));
|
||||
elf_xen_parse_guest_info(elf, parms);
|
||||
break;
|
||||
}
|
||||
diff --git a/xen/common/libelf/libelf-tools.c b/xen/common/libelf/libelf-tools.c
|
||||
index f1fd886..3a0cde1 100644
|
||||
--- a/xen/common/libelf/libelf-tools.c
|
||||
+++ b/xen/common/libelf/libelf-tools.c
|
||||
@@ -119,7 +119,7 @@ const char *elf_section_name(struct elf_binary *elf,
|
||||
if ( ELF_PTRVAL_INVALID(elf->sec_strtab) )
|
||||
return "unknown";
|
||||
|
||||
- return elf->sec_strtab + elf_uval(elf, shdr, sh_name);
|
||||
+ return elf_strval(elf, elf->sec_strtab + elf_uval(elf, shdr, sh_name));
|
||||
}
|
||||
|
||||
ELF_PTRVAL_CONST_VOID elf_section_start(struct elf_binary *elf, ELF_HANDLE_DECL(elf_shdr) shdr)
|
||||
@@ -151,6 +151,7 @@ ELF_HANDLE_DECL(elf_sym) elf_sym_by_name(struct elf_binary *elf, const char *sym
|
||||
ELF_PTRVAL_CONST_VOID end = elf_section_end(elf, elf->sym_tab);
|
||||
ELF_HANDLE_DECL(elf_sym) sym;
|
||||
uint64_t info, name;
|
||||
+ const char *sym_name;
|
||||
|
||||
for ( ; ptr < end; ptr += elf_size(elf, sym) )
|
||||
{
|
||||
@@ -159,7 +160,10 @@ ELF_HANDLE_DECL(elf_sym) elf_sym_by_name(struct elf_binary *elf, const char *sym
|
||||
name = elf_uval(elf, sym, st_name);
|
||||
if ( ELF32_ST_BIND(info) != STB_GLOBAL )
|
||||
continue;
|
||||
- if ( strcmp(elf->sym_strtab + name, symbol) )
|
||||
+ sym_name = elf_strval(elf, elf->sym_strtab + name);
|
||||
+ if ( sym_name == NULL ) /* out of range, oops */
|
||||
+ return ELF_INVALID_HANDLE(elf_sym);
|
||||
+ if ( strcmp(sym_name, symbol) )
|
||||
continue;
|
||||
return sym;
|
||||
}
|
||||
@@ -177,7 +181,7 @@ ELF_HANDLE_DECL(elf_sym) elf_sym_by_index(struct elf_binary *elf, int index)
|
||||
|
||||
const char *elf_note_name(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note)
|
||||
{
|
||||
- return ELF_HANDLE_PTRVAL(note) + elf_size(elf, note);
|
||||
+ return elf_strval(elf, ELF_HANDLE_PTRVAL(note) + elf_size(elf, note));
|
||||
}
|
||||
|
||||
ELF_PTRVAL_CONST_VOID elf_note_desc(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note)
|
||||
diff --git a/xen/include/xen/libelf.h b/xen/include/xen/libelf.h
|
||||
index cefd3d3..af5b5c5 100644
|
||||
--- a/xen/include/xen/libelf.h
|
||||
+++ b/xen/include/xen/libelf.h
|
||||
@@ -252,6 +252,9 @@ uint64_t elf_access_unsigned(struct elf_binary *elf, ELF_PTRVAL_CONST_VOID ptr,
|
||||
uint64_t elf_round_up(struct elf_binary *elf, uint64_t addr);
|
||||
|
||||
|
||||
+#define elf_strval(elf,x) ((const char*)(x)) /* may return NULL in the future */
|
||||
+#define elf_strfmt(elf,x) ((const char*)(x)) /* will return (invalid) instead */
|
||||
+
|
||||
#define elf_memcpy_safe(elf, dst, src, sz) memcpy((dst),(src),(sz))
|
||||
#define elf_memset_safe(elf, dst, c, sz) memset((dst),(c),(sz))
|
||||
/*
|
||||
@@ -279,7 +282,7 @@ ELF_HANDLE_DECL(elf_shdr) elf_shdr_by_name(struct elf_binary *elf, const char *n
|
||||
ELF_HANDLE_DECL(elf_shdr) elf_shdr_by_index(struct elf_binary *elf, int index);
|
||||
ELF_HANDLE_DECL(elf_phdr) elf_phdr_by_index(struct elf_binary *elf, int index);
|
||||
|
||||
-const char *elf_section_name(struct elf_binary *elf, ELF_HANDLE_DECL(elf_shdr) shdr);
|
||||
+const char *elf_section_name(struct elf_binary *elf, ELF_HANDLE_DECL(elf_shdr) shdr); /* might return NULL if inputs are invalid */
|
||||
ELF_PTRVAL_CONST_VOID elf_section_start(struct elf_binary *elf, ELF_HANDLE_DECL(elf_shdr) shdr);
|
||||
ELF_PTRVAL_CONST_VOID elf_section_end(struct elf_binary *elf, ELF_HANDLE_DECL(elf_shdr) shdr);
|
||||
|
||||
@@ -289,7 +292,7 @@ ELF_PTRVAL_CONST_VOID elf_segment_end(struct elf_binary *elf, ELF_HANDLE_DECL(el
|
||||
ELF_HANDLE_DECL(elf_sym) elf_sym_by_name(struct elf_binary *elf, const char *symbol);
|
||||
ELF_HANDLE_DECL(elf_sym) elf_sym_by_index(struct elf_binary *elf, int index);
|
||||
|
||||
-const char *elf_note_name(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note);
|
||||
+const char *elf_note_name(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note); /* may return NULL */
|
||||
ELF_PTRVAL_CONST_VOID elf_note_desc(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note);
|
||||
uint64_t elf_note_numeric(struct elf_binary *elf, ELF_HANDLE_DECL(elf_note) note);
|
||||
uint64_t elf_note_numeric_array(struct elf_binary *, ELF_HANDLE_DECL(elf_note),
|
||||
--
|
||||
1.7.2.5
|
||||
|
|
@ -1,334 +0,0 @@
|
|||
libxl: Restrict permissions on PV console device xenstore nodes
|
||||
|
||||
Matthew Daley has observed that the PV console protocol places sensitive host
|
||||
state into a guest writeable xenstore locations, this includes:
|
||||
|
||||
- The pty used to communicate between the console backend daemon and its
|
||||
client, allowing the guest administrator to read and write arbitrary host
|
||||
files.
|
||||
- The output file, allowing the guest administrator to write arbitrary host
|
||||
files or to target arbitrary qemu chardevs which include sockets, udp, ptr,
|
||||
pipes etc (see -chardev in qemu(1) for a more complete list).
|
||||
- The maximum buffer size, allowing the guest administrator to consume more
|
||||
resources than the host administrator has configured.
|
||||
- The backend to use (qemu vs xenconsoled), potentially allowing the guest
|
||||
administrator to confuse host software.
|
||||
|
||||
So we arrange to make the sensitive keys in the xenstore frontend directory
|
||||
read only for the guest. This is safe since the xenstore permissions model,
|
||||
unlike POSIX directory permissions, does not allow the guest to remove and
|
||||
recreate a node if it has write access to the containing directory.
|
||||
|
||||
There are a few associated wrinkles:
|
||||
|
||||
- The primary PV console is "special". It's xenstore node is not under the
|
||||
usual /devices/ subtree and it does not use the customary xenstore state
|
||||
machine protocol. Unfortunately its directory is used for other things,
|
||||
including the vnc-port node, which we do not want the guest to be able to
|
||||
write to. Rather than trying to track down all the possible secondary uses
|
||||
of this directory just make it r/o to the guest. All newly created
|
||||
subdirectories inherit these permissions and so are now safe by default.
|
||||
|
||||
- The other serial consoles do use the customary xenstore state machine and
|
||||
therefore need write access to at least the "protocol" and "state" nodes,
|
||||
however they may also want to use arbitrary "feature-foo" nodes (although
|
||||
I'm not aware of any) and therefore we cannot simply lock down the entire
|
||||
frontend directory. Instead we add support to libxl__device_generic_add for
|
||||
frontend keys which are explicitly read only and use that to lock down the
|
||||
sensitive keys.
|
||||
|
||||
- Minios' console frontend wants to write the "type" node, which it has no
|
||||
business doing since this is a host/toolstack level decision. This fails
|
||||
now that the node has become read only to the PV guest. Since the toolstack
|
||||
already writes this node just remove the attempt to set it.
|
||||
|
||||
This is CVE-XXXX-XXX / XSA-57
|
||||
|
||||
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
|
||||
Conflicts:
|
||||
tools/libxl/libxl.c (no vtpm, free front_ro on error in
|
||||
libxl__device_console_add)
|
||||
|
||||
diff --git a/extras/mini-os/console/xenbus.c b/extras/mini-os/console/xenbus.c
|
||||
index 77de82a..e65baf7 100644
|
||||
--- a/extras/mini-os/console/xenbus.c
|
||||
+++ b/extras/mini-os/console/xenbus.c
|
||||
@@ -122,12 +122,6 @@ again:
|
||||
goto abort_transaction;
|
||||
}
|
||||
|
||||
- err = xenbus_printf(xbt, nodename, "type", "%s", "ioemu");
|
||||
- if (err) {
|
||||
- message = "writing type";
|
||||
- goto abort_transaction;
|
||||
- }
|
||||
-
|
||||
snprintf(path, sizeof(path), "%s/state", nodename);
|
||||
err = xenbus_switch_state(xbt, path, XenbusStateConnected);
|
||||
if (err) {
|
||||
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
|
||||
index a6e9601..32d788a 100644
|
||||
--- a/tools/libxl/libxl.c
|
||||
+++ b/tools/libxl/libxl.c
|
||||
@@ -1920,8 +1920,9 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid,
|
||||
flexarray_append(front, disk->is_cdrom ? "cdrom" : "disk");
|
||||
|
||||
libxl__device_generic_add(gc, t, device,
|
||||
- libxl__xs_kvs_of_flexarray(gc, back, back->count),
|
||||
- libxl__xs_kvs_of_flexarray(gc, front, front->count));
|
||||
+ libxl__xs_kvs_of_flexarray(gc, back, back->count),
|
||||
+ libxl__xs_kvs_of_flexarray(gc, front, front->count),
|
||||
+ NULL);
|
||||
|
||||
rc = libxl__xs_transaction_commit(gc, &t);
|
||||
if (!rc) break;
|
||||
@@ -2633,8 +2634,9 @@ void libxl__device_nic_add(libxl__egc *egc, uint32_t domid,
|
||||
flexarray_append(front, libxl__sprintf(gc,
|
||||
LIBXL_MAC_FMT, LIBXL_MAC_BYTES(nic->mac)));
|
||||
libxl__device_generic_add(gc, XBT_NULL, device,
|
||||
- libxl__xs_kvs_of_flexarray(gc, back, back->count),
|
||||
- libxl__xs_kvs_of_flexarray(gc, front, front->count));
|
||||
+ libxl__xs_kvs_of_flexarray(gc, back, back->count),
|
||||
+ libxl__xs_kvs_of_flexarray(gc, front, front->count),
|
||||
+ NULL);
|
||||
|
||||
aodev->dev = device;
|
||||
aodev->action = DEVICE_CONNECT;
|
||||
@@ -2830,7 +2832,7 @@ int libxl__device_console_add(libxl__gc *gc, uint32_t domid,
|
||||
libxl__device_console *console,
|
||||
libxl__domain_build_state *state)
|
||||
{
|
||||
- flexarray_t *front;
|
||||
+ flexarray_t *front, *ro_front;
|
||||
flexarray_t *back;
|
||||
libxl__device device;
|
||||
int rc;
|
||||
@@ -2845,6 +2847,11 @@ int libxl__device_console_add(libxl__gc *gc, uint32_t domid,
|
||||
rc = ERROR_NOMEM;
|
||||
goto out;
|
||||
}
|
||||
+ ro_front = flexarray_make(16, 1);
|
||||
+ if (!ro_front) {
|
||||
+ rc = ERROR_NOMEM;
|
||||
+ goto out;
|
||||
+ }
|
||||
back = flexarray_make(16, 1);
|
||||
if (!back) {
|
||||
rc = ERROR_NOMEM;
|
||||
@@ -2871,21 +2878,24 @@ int libxl__device_console_add(libxl__gc *gc, uint32_t domid,
|
||||
|
||||
flexarray_append(front, "backend-id");
|
||||
flexarray_append(front, libxl__sprintf(gc, "%d", console->backend_domid));
|
||||
- flexarray_append(front, "limit");
|
||||
- flexarray_append(front, libxl__sprintf(gc, "%d", LIBXL_XENCONSOLE_LIMIT));
|
||||
- flexarray_append(front, "type");
|
||||
+
|
||||
+ flexarray_append(ro_front, "limit");
|
||||
+ flexarray_append(ro_front, libxl__sprintf(gc, "%d", LIBXL_XENCONSOLE_LIMIT));
|
||||
+ flexarray_append(ro_front, "type");
|
||||
if (console->consback == LIBXL__CONSOLE_BACKEND_XENCONSOLED)
|
||||
- flexarray_append(front, "xenconsoled");
|
||||
+ flexarray_append(ro_front, "xenconsoled");
|
||||
else
|
||||
- flexarray_append(front, "ioemu");
|
||||
- flexarray_append(front, "output");
|
||||
- flexarray_append(front, console->output);
|
||||
+ flexarray_append(ro_front, "ioemu");
|
||||
+ flexarray_append(ro_front, "output");
|
||||
+ flexarray_append(ro_front, console->output);
|
||||
+ flexarray_append(ro_front, "tty");
|
||||
+ flexarray_append(ro_front, "");
|
||||
|
||||
if (state) {
|
||||
- flexarray_append(front, "port");
|
||||
- flexarray_append(front, libxl__sprintf(gc, "%"PRIu32, state->console_port));
|
||||
- flexarray_append(front, "ring-ref");
|
||||
- flexarray_append(front, libxl__sprintf(gc, "%lu", state->console_mfn));
|
||||
+ flexarray_append(ro_front, "port");
|
||||
+ flexarray_append(ro_front, libxl__sprintf(gc, "%"PRIu32, state->console_port));
|
||||
+ flexarray_append(ro_front, "ring-ref");
|
||||
+ flexarray_append(ro_front, libxl__sprintf(gc, "%lu", state->console_mfn));
|
||||
} else {
|
||||
flexarray_append(front, "state");
|
||||
flexarray_append(front, libxl__sprintf(gc, "%d", 1));
|
||||
@@ -2894,11 +2904,13 @@ int libxl__device_console_add(libxl__gc *gc, uint32_t domid,
|
||||
}
|
||||
|
||||
libxl__device_generic_add(gc, XBT_NULL, &device,
|
||||
- libxl__xs_kvs_of_flexarray(gc, back, back->count),
|
||||
- libxl__xs_kvs_of_flexarray(gc, front, front->count));
|
||||
+ libxl__xs_kvs_of_flexarray(gc, back, back->count),
|
||||
+ libxl__xs_kvs_of_flexarray(gc, front, front->count),
|
||||
+ libxl__xs_kvs_of_flexarray(gc, ro_front, ro_front->count));
|
||||
rc = 0;
|
||||
out_free:
|
||||
flexarray_free(back);
|
||||
+ flexarray_free(ro_front);
|
||||
flexarray_free(front);
|
||||
out:
|
||||
return rc;
|
||||
@@ -2982,8 +2994,9 @@ int libxl__device_vkb_add(libxl__gc *gc, uint32_t domid,
|
||||
flexarray_append(front, libxl__sprintf(gc, "%d", 1));
|
||||
|
||||
libxl__device_generic_add(gc, XBT_NULL, &device,
|
||||
- libxl__xs_kvs_of_flexarray(gc, back, back->count),
|
||||
- libxl__xs_kvs_of_flexarray(gc, front, front->count));
|
||||
+ libxl__xs_kvs_of_flexarray(gc, back, back->count),
|
||||
+ libxl__xs_kvs_of_flexarray(gc, front, front->count),
|
||||
+ NULL);
|
||||
rc = 0;
|
||||
out_free:
|
||||
flexarray_free(back);
|
||||
@@ -3096,8 +3109,9 @@ int libxl__device_vfb_add(libxl__gc *gc, uint32_t domid, libxl_device_vfb *vfb)
|
||||
flexarray_append_pair(front, "state", libxl__sprintf(gc, "%d", 1));
|
||||
|
||||
libxl__device_generic_add(gc, XBT_NULL, &device,
|
||||
- libxl__xs_kvs_of_flexarray(gc, back, back->count),
|
||||
- libxl__xs_kvs_of_flexarray(gc, front, front->count));
|
||||
+ libxl__xs_kvs_of_flexarray(gc, back, back->count),
|
||||
+ libxl__xs_kvs_of_flexarray(gc, front, front->count),
|
||||
+ NULL);
|
||||
rc = 0;
|
||||
out_free:
|
||||
flexarray_free(front);
|
||||
diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c
|
||||
index c3283f1..1c04a21 100644
|
||||
--- a/tools/libxl/libxl_device.c
|
||||
+++ b/tools/libxl/libxl_device.c
|
||||
@@ -84,11 +84,12 @@ out:
|
||||
}
|
||||
|
||||
int libxl__device_generic_add(libxl__gc *gc, xs_transaction_t t,
|
||||
- libxl__device *device, char **bents, char **fents)
|
||||
+ libxl__device *device, char **bents, char **fents, char **ro_fents)
|
||||
{
|
||||
libxl_ctx *ctx = libxl__gc_owner(gc);
|
||||
char *frontend_path, *backend_path;
|
||||
struct xs_permissions frontend_perms[2];
|
||||
+ struct xs_permissions ro_frontend_perms[2];
|
||||
struct xs_permissions backend_perms[2];
|
||||
int create_transaction = t == XBT_NULL;
|
||||
|
||||
@@ -100,22 +101,37 @@ int libxl__device_generic_add(libxl__gc *gc, xs_transaction_t t,
|
||||
frontend_perms[1].id = device->backend_domid;
|
||||
frontend_perms[1].perms = XS_PERM_READ;
|
||||
|
||||
- backend_perms[0].id = device->backend_domid;
|
||||
- backend_perms[0].perms = XS_PERM_NONE;
|
||||
- backend_perms[1].id = device->domid;
|
||||
- backend_perms[1].perms = XS_PERM_READ;
|
||||
+ ro_frontend_perms[0].id = backend_perms[0].id = device->backend_domid;
|
||||
+ ro_frontend_perms[0].perms = backend_perms[0].perms = XS_PERM_NONE;
|
||||
+ ro_frontend_perms[1].id = backend_perms[1].id = device->domid;
|
||||
+ ro_frontend_perms[1].perms = backend_perms[1].perms = XS_PERM_READ;
|
||||
|
||||
retry_transaction:
|
||||
if (create_transaction)
|
||||
t = xs_transaction_start(ctx->xsh);
|
||||
/* FIXME: read frontend_path and check state before removing stuff */
|
||||
|
||||
- if (fents) {
|
||||
+ if (fents || ro_fents) {
|
||||
xs_rm(ctx->xsh, t, frontend_path);
|
||||
xs_mkdir(ctx->xsh, t, frontend_path);
|
||||
- xs_set_permissions(ctx->xsh, t, frontend_path, frontend_perms, ARRAY_SIZE(frontend_perms));
|
||||
+ /* Console 0 is a special case. It doesn't use the regular PV
|
||||
+ * state machine but also the frontend directory has
|
||||
+ * historically contained other information, such as the
|
||||
+ * vnc-port, which we don't want the guest fiddling with.
|
||||
+ */
|
||||
+ if (device->kind == LIBXL__DEVICE_KIND_CONSOLE && device->devid == 0)
|
||||
+ xs_set_permissions(ctx->xsh, t, frontend_path,
|
||||
+ ro_frontend_perms, ARRAY_SIZE(ro_frontend_perms));
|
||||
+ else
|
||||
+ xs_set_permissions(ctx->xsh, t, frontend_path,
|
||||
+ frontend_perms, ARRAY_SIZE(frontend_perms));
|
||||
xs_write(ctx->xsh, t, libxl__sprintf(gc, "%s/backend", frontend_path), backend_path, strlen(backend_path));
|
||||
- libxl__xs_writev(gc, t, frontend_path, fents);
|
||||
+ if (fents)
|
||||
+ libxl__xs_writev_perms(gc, t, frontend_path, fents,
|
||||
+ frontend_perms, ARRAY_SIZE(frontend_perms));
|
||||
+ if (ro_fents)
|
||||
+ libxl__xs_writev_perms(gc, t, frontend_path, ro_fents,
|
||||
+ ro_frontend_perms, ARRAY_SIZE(ro_frontend_perms));
|
||||
}
|
||||
|
||||
if (bents) {
|
||||
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
|
||||
index 13fa509..ae96a74 100644
|
||||
--- a/tools/libxl/libxl_internal.h
|
||||
+++ b/tools/libxl/libxl_internal.h
|
||||
@@ -516,6 +516,11 @@ _hidden char **libxl__xs_kvs_of_flexarray(libxl__gc *gc, flexarray_t *array, int
|
||||
/* treats kvs as pairs of keys and values and writes each to dir. */
|
||||
_hidden int libxl__xs_writev(libxl__gc *gc, xs_transaction_t t,
|
||||
const char *dir, char **kvs);
|
||||
+/* as writev but also sets the permissions on each path */
|
||||
+_hidden int libxl__xs_writev_perms(libxl__gc *gc, xs_transaction_t t,
|
||||
+ const char *dir, char *kvs[],
|
||||
+ struct xs_permissions *perms,
|
||||
+ unsigned int num_perms);
|
||||
/* _atonce creates a transaction and writes all keys at once */
|
||||
_hidden int libxl__xs_writev_atonce(libxl__gc *gc,
|
||||
const char *dir, char **kvs);
|
||||
@@ -930,7 +935,7 @@ _hidden int libxl__device_console_add(libxl__gc *gc, uint32_t domid,
|
||||
libxl__domain_build_state *state);
|
||||
|
||||
_hidden int libxl__device_generic_add(libxl__gc *gc, xs_transaction_t t,
|
||||
- libxl__device *device, char **bents, char **fents);
|
||||
+ libxl__device *device, char **bents, char **fents, char **ro_fents);
|
||||
_hidden char *libxl__device_backend_path(libxl__gc *gc, libxl__device *device);
|
||||
_hidden char *libxl__device_frontend_path(libxl__gc *gc, libxl__device *device);
|
||||
_hidden int libxl__parse_backend_path(libxl__gc *gc, const char *path,
|
||||
diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c
|
||||
index 48986f3..d373b4d 100644
|
||||
--- a/tools/libxl/libxl_pci.c
|
||||
+++ b/tools/libxl/libxl_pci.c
|
||||
@@ -106,7 +106,8 @@ int libxl__create_pci_backend(libxl__gc *gc, uint32_t domid,
|
||||
|
||||
libxl__device_generic_add(gc, XBT_NULL, &device,
|
||||
libxl__xs_kvs_of_flexarray(gc, back, back->count),
|
||||
- libxl__xs_kvs_of_flexarray(gc, front, front->count));
|
||||
+ libxl__xs_kvs_of_flexarray(gc, front, front->count),
|
||||
+ NULL);
|
||||
|
||||
out:
|
||||
if (back)
|
||||
diff --git a/tools/libxl/libxl_xshelp.c b/tools/libxl/libxl_xshelp.c
|
||||
index 52af484..d7eaa66 100644
|
||||
--- a/tools/libxl/libxl_xshelp.c
|
||||
+++ b/tools/libxl/libxl_xshelp.c
|
||||
@@ -41,8 +41,10 @@ char **libxl__xs_kvs_of_flexarray(libxl__gc *gc, flexarray_t *array, int length)
|
||||
return kvs;
|
||||
}
|
||||
|
||||
-int libxl__xs_writev(libxl__gc *gc, xs_transaction_t t,
|
||||
- const char *dir, char *kvs[])
|
||||
+int libxl__xs_writev_perms(libxl__gc *gc, xs_transaction_t t,
|
||||
+ const char *dir, char *kvs[],
|
||||
+ struct xs_permissions *perms,
|
||||
+ unsigned int num_perms)
|
||||
{
|
||||
libxl_ctx *ctx = libxl__gc_owner(gc);
|
||||
char *path;
|
||||
@@ -56,11 +58,19 @@ int libxl__xs_writev(libxl__gc *gc, xs_transaction_t t,
|
||||
if (path && kvs[i + 1]) {
|
||||
int length = strlen(kvs[i + 1]);
|
||||
xs_write(ctx->xsh, t, path, kvs[i + 1], length);
|
||||
+ if (perms)
|
||||
+ xs_set_permissions(ctx->xsh, t, path, perms, num_perms);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int libxl__xs_writev(libxl__gc *gc, xs_transaction_t t,
|
||||
+ const char *dir, char *kvs[])
|
||||
+{
|
||||
+ return libxl__xs_writev_perms(gc, t, dir, kvs, NULL, 0);
|
||||
+}
|
||||
+
|
||||
int libxl__xs_writev_atonce(libxl__gc *gc,
|
||||
const char *dir, char *kvs[])
|
||||
{
|
||||
|
|
@ -1,69 +0,0 @@
|
|||
libxl: fix vif rate parsing
|
||||
|
||||
strtok can return NULL here. We don't need to use strtok anyway, so just
|
||||
use a simple strchr method.
|
||||
|
||||
Coverity-ID: 1055642
|
||||
|
||||
This is CVE-2013-4369 / XSA-68
|
||||
|
||||
Signed-off-by: Matthew Daley <mattjd@gmail.com>
|
||||
|
||||
Fix type. Add test case
|
||||
|
||||
Signed-off-by: Ian Campbell <Ian.campbell@citrix.com>
|
||||
|
||||
diff --git a/tools/libxl/check-xl-vif-parse b/tools/libxl/check-xl-vif-parse
|
||||
index 0473182..02c6dba 100755
|
||||
--- a/tools/libxl/check-xl-vif-parse
|
||||
+++ b/tools/libxl/check-xl-vif-parse
|
||||
@@ -206,4 +206,8 @@ expected </dev/null
|
||||
one $e rate=4294967295GB/s@5us
|
||||
one $e rate=4296MB/s@4294s
|
||||
|
||||
+# test include of single '@'
|
||||
+expected </dev/null
|
||||
+one $e rate=@
|
||||
+
|
||||
complete
|
||||
diff --git a/tools/libxl/libxlu_vif.c b/tools/libxl/libxlu_vif.c
|
||||
index 3b3de0f..0665e62 100644
|
||||
--- a/tools/libxl/libxlu_vif.c
|
||||
+++ b/tools/libxl/libxlu_vif.c
|
||||
@@ -95,23 +95,30 @@ int xlu_vif_parse_rate(XLU_Config *cfg, const char *rate, libxl_device_nic *nic)
|
||||
uint64_t bytes_per_sec = 0;
|
||||
uint64_t bytes_per_interval = 0;
|
||||
uint32_t interval_usecs = 50000UL; /* Default to 50ms */
|
||||
- char *ratetok, *tmprate;
|
||||
+ char *p, *tmprate;
|
||||
int rc = 0;
|
||||
|
||||
tmprate = strdup(rate);
|
||||
+ if (tmprate == NULL) {
|
||||
+ rc = ENOMEM;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ p = strchr(tmprate, '@');
|
||||
+ if (p != NULL)
|
||||
+ *p++ = 0;
|
||||
+
|
||||
if (!strcmp(tmprate,"")) {
|
||||
xlu__vif_err(cfg, "no rate specified", rate);
|
||||
rc = EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
- ratetok = strtok(tmprate, "@");
|
||||
- rc = vif_parse_rate_bytes_per_sec(cfg, ratetok, &bytes_per_sec);
|
||||
+ rc = vif_parse_rate_bytes_per_sec(cfg, tmprate, &bytes_per_sec);
|
||||
if (rc) goto out;
|
||||
|
||||
- ratetok = strtok(NULL, "@");
|
||||
- if (ratetok != NULL) {
|
||||
- rc = vif_parse_rate_interval_usecs(cfg, ratetok, &interval_usecs);
|
||||
+ if (p != NULL) {
|
||||
+ rc = vif_parse_rate_interval_usecs(cfg, p, &interval_usecs);
|
||||
if (rc) goto out;
|
||||
}
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
From 067c122873c67bd1d9620f8340f9c9c209135388 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Daley <mattjd@gmail.com>
|
||||
Date: Tue, 10 Sep 2013 23:12:45 +1200
|
||||
Subject: [PATCH] tools/ocaml: fix erroneous free of cpumap in
|
||||
stub_xc_vcpu_getaffinity
|
||||
|
||||
Not sure how it got there...
|
||||
|
||||
Coverity-ID: 1056196
|
||||
|
||||
This is CVE-2013-4370 / XSA-69
|
||||
|
||||
Signed-off-by: Matthew Daley <mattjd@gmail.com>
|
||||
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
---
|
||||
tools/ocaml/libs/xc/xenctrl_stubs.c | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/tools/ocaml/libs/xc/xenctrl_stubs.c b/tools/ocaml/libs/xc/xenctrl_stubs.c
|
||||
index df756ad..f5cf0ed 100644
|
||||
--- a/tools/ocaml/libs/xc/xenctrl_stubs.c
|
||||
+++ b/tools/ocaml/libs/xc/xenctrl_stubs.c
|
||||
@@ -461,8 +461,6 @@ CAMLprim value stub_xc_vcpu_getaffinity(value xch, value domid,
|
||||
|
||||
retval = xc_vcpu_getaffinity(_H(xch), _D(domid),
|
||||
Int_val(vcpu), c_cpumap);
|
||||
- free(c_cpumap);
|
||||
-
|
||||
if (retval < 0) {
|
||||
free(c_cpumap);
|
||||
failwith_xc(_H(xch));
|
||||
--
|
||||
1.7.10.4
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
From 94db3e1cb356a0d2de1753888ceb0eb767404ec4 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Daley <mattjd@gmail.com>
|
||||
Date: Tue, 10 Sep 2013 22:18:46 +1200
|
||||
Subject: [PATCH] libxl: fix out-of-memory error handling in
|
||||
libxl_list_cpupool
|
||||
|
||||
...otherwise it will return freed memory. All the current users of this
|
||||
function check already for a NULL return, so use that.
|
||||
|
||||
Coverity-ID: 1056194
|
||||
|
||||
This is CVE-2013-4371 / XSA-70
|
||||
|
||||
Signed-off-by: Matthew Daley <mattjd@gmail.com>
|
||||
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
---
|
||||
tools/libxl/libxl.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
|
||||
index 0879f23..17653ef 100644
|
||||
--- a/tools/libxl/libxl.c
|
||||
+++ b/tools/libxl/libxl.c
|
||||
@@ -651,6 +651,7 @@ libxl_cpupoolinfo * libxl_list_cpupool(libxl_ctx *ctx, int *nb_pool_out)
|
||||
if (!tmp) {
|
||||
LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "allocating cpupool info");
|
||||
libxl_cpupoolinfo_list_free(ptr, i);
|
||||
+ ptr = NULL;
|
||||
goto out;
|
||||
}
|
||||
ptr = tmp;
|
||||
--
|
||||
1.7.10.4
|
||||
|
|
@ -1,74 +0,0 @@
|
|||
tools: xenstored: if the reply is too big then send E2BIG error
|
||||
|
||||
This fixes the issue for both C and ocaml xenstored, however only the ocaml
|
||||
xenstored is vulnerable in its default configuration.
|
||||
|
||||
Adding a new error appears to be safe, since bit libxenstore and the Linux
|
||||
driver at least treat an unknown error code as EINVAL.
|
||||
|
||||
This is XSA-72
|
||||
|
||||
Original ocaml patch by Jerome Maloberti <jerome.maloberti@citrix.com>
|
||||
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
Signed-off-by: Thomas Sanders <thomas.sanders@citrix.com>
|
||||
|
||||
diff --git a/tools/ocaml/xenstored/connection.ml b/tools/ocaml/xenstored/connection.ml
|
||||
index 273fe4d..47695f8 100644
|
||||
--- a/tools/ocaml/xenstored/connection.ml
|
||||
+++ b/tools/ocaml/xenstored/connection.ml
|
||||
@@ -18,6 +18,8 @@ exception End_of_file
|
||||
|
||||
open Stdext
|
||||
|
||||
+let xenstore_payload_max = 4096 (* xen/include/public/io/xs_wire.h *)
|
||||
+
|
||||
type watch = {
|
||||
con: t;
|
||||
token: string;
|
||||
@@ -112,8 +114,15 @@ let restrict con domid =
|
||||
let set_target con target_domid =
|
||||
con.perm <- Perms.Connection.set_target (get_perm con) ~perms:[Perms.READ; Perms.WRITE] target_domid
|
||||
|
||||
+let is_backend_mmap con = match con.xb.Xenbus.Xb.backend with
|
||||
+ | Xenbus.Xb.Xenmmap _ -> true
|
||||
+ | _ -> false
|
||||
+
|
||||
let send_reply con tid rid ty data =
|
||||
- Xenbus.Xb.queue con.xb (Xenbus.Xb.Packet.create tid rid ty data)
|
||||
+ if (String.length data) > xenstore_payload_max && (is_backend_mmap con) then
|
||||
+ Xenbus.Xb.queue con.xb (Xenbus.Xb.Packet.create tid rid Xenbus.Xb.Op.Error "E2BIG\000")
|
||||
+ else
|
||||
+ Xenbus.Xb.queue con.xb (Xenbus.Xb.Packet.create tid rid ty data)
|
||||
|
||||
let send_error con tid rid err = send_reply con tid rid Xenbus.Xb.Op.Error (err ^ "\000")
|
||||
let send_ack con tid rid ty = send_reply con tid rid ty "OK\000"
|
||||
diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c
|
||||
index 0f8ba64..ccfdaa3 100644
|
||||
--- a/tools/xenstore/xenstored_core.c
|
||||
+++ b/tools/xenstore/xenstored_core.c
|
||||
@@ -629,6 +629,11 @@ void send_reply(struct connection *conn, enum xsd_sockmsg_type type,
|
||||
{
|
||||
struct buffered_data *bdata;
|
||||
|
||||
+ if ( len > XENSTORE_PAYLOAD_MAX ) {
|
||||
+ send_error(conn, E2BIG);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
/* Message is a child of the connection context for auto-cleanup. */
|
||||
bdata = new_buffer(conn);
|
||||
bdata->buffer = talloc_array(bdata, char, len);
|
||||
diff --git a/xen/include/public/io/xs_wire.h b/xen/include/public/io/xs_wire.h
|
||||
index 99d24e3..585f0c8 100644
|
||||
--- a/xen/include/public/io/xs_wire.h
|
||||
+++ b/xen/include/public/io/xs_wire.h
|
||||
@@ -83,7 +83,8 @@ __attribute__((unused))
|
||||
XSD_ERROR(EROFS),
|
||||
XSD_ERROR(EBUSY),
|
||||
XSD_ERROR(EAGAIN),
|
||||
- XSD_ERROR(EISCONN)
|
||||
+ XSD_ERROR(EISCONN),
|
||||
+ XSD_ERROR(E2BIG)
|
||||
};
|
||||
#endif
|
||||
|
|
@ -1,373 +0,0 @@
|
|||
# Copyright 1999-2013 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/xen-tools/xen-tools-4.2.2-r3.ebuild,v 1.8 2013/11/09 08:14:57 mgorny Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
PYTHON_COMPAT=( python{2_6,2_7} )
|
||||
PYTHON_REQ_USE='xml,threads'
|
||||
|
||||
IPXE_TARBALL_URL="http://dev.gentoo.org/~idella4/tarballs/ipxe.tar.gz"
|
||||
XEN_SEABIOS_URL="http://dev.gentoo.org/~idella4/tarballs/seabios-0-20121121.tar.bz2"
|
||||
XSAPATCHES="http://dev.gentoo.org/~idella4/"
|
||||
if [[ $PV == *9999 ]]; then
|
||||
KEYWORDS=""
|
||||
REPO="xen-unstable.hg"
|
||||
EHG_REPO_URI="http://xenbits.xensource.com/${REPO}"
|
||||
S="${WORKDIR}/${REPO}"
|
||||
live_eclass="mercurial"
|
||||
else
|
||||
KEYWORDS="amd64 x86"
|
||||
SRC_URI="http://bits.xensource.com/oss-xen/release/${PV}/xen-${PV}.tar.gz
|
||||
$IPXE_TARBALL_URL
|
||||
$XEN_SEABIOS_URL
|
||||
$XSAPATCHES/patches/XSA-55patches.tar.gz"
|
||||
S="${WORKDIR}/xen-${PV}"
|
||||
fi
|
||||
|
||||
inherit bash-completion-r1 eutils flag-o-matic multilib python-single-r1 toolchain-funcs udev ${live_eclass}
|
||||
|
||||
DESCRIPTION="Xend daemon and tools"
|
||||
HOMEPAGE="http://xen.org/"
|
||||
DOCS=( README docs/README.xen-bugtool )
|
||||
|
||||
LICENSE="GPL-2"
|
||||
SLOT="0"
|
||||
IUSE="api custom-cflags debug doc flask hvm qemu pygrub screen static-libs xend"
|
||||
|
||||
REQUIRED_USE="hvm? ( qemu )
|
||||
${PYTHON_REQUIRED_USE}"
|
||||
|
||||
DEPEND="dev-libs/lzo:2
|
||||
dev-libs/yajl
|
||||
dev-libs/libgcrypt
|
||||
dev-python/lxml[${PYTHON_USEDEP}]
|
||||
dev-python/pypam[${PYTHON_USEDEP}]
|
||||
sys-libs/zlib
|
||||
sys-power/iasl
|
||||
dev-ml/findlib
|
||||
hvm? ( media-libs/libsdl )
|
||||
api? ( dev-libs/libxml2
|
||||
net-misc/curl )
|
||||
${PYTHON_DEPS}
|
||||
pygrub? ( ${PYTHON_DEPS//${PYTHON_REQ_USE}/ncurses} )
|
||||
sys-devel/bin86
|
||||
sys-devel/dev86
|
||||
dev-lang/perl
|
||||
app-misc/pax-utils
|
||||
doc? (
|
||||
app-doc/doxygen
|
||||
dev-tex/latex2html[png,gif]
|
||||
media-gfx/transfig
|
||||
media-gfx/graphviz
|
||||
dev-tex/xcolor
|
||||
dev-texlive/texlive-latexextra
|
||||
virtual/latex-base
|
||||
dev-tex/latexmk
|
||||
dev-texlive/texlive-latex
|
||||
dev-texlive/texlive-pictures
|
||||
dev-texlive/texlive-latexrecommended
|
||||
)
|
||||
hvm? ( x11-proto/xproto )"
|
||||
RDEPEND="sys-apps/iproute2
|
||||
net-misc/bridge-utils
|
||||
screen? (
|
||||
app-misc/screen
|
||||
app-admin/logrotate
|
||||
)
|
||||
virtual/udev"
|
||||
|
||||
# hvmloader is used to bootstrap a fully virtualized kernel
|
||||
# Approved by QA team in bug #144032
|
||||
QA_WX_LOAD="usr/lib/xen/boot/hvmloader"
|
||||
|
||||
RESTRICT="test"
|
||||
|
||||
pkg_setup() {
|
||||
python-single-r1_pkg_setup
|
||||
export "CONFIG_LOMOUNT=y"
|
||||
|
||||
if has_version dev-libs/libgcrypt; then
|
||||
export "CONFIG_GCRYPT=y"
|
||||
fi
|
||||
|
||||
if use qemu; then
|
||||
export "CONFIG_IOEMU=y"
|
||||
else
|
||||
export "CONFIG_IOEMU=n"
|
||||
fi
|
||||
|
||||
if ! use x86 && ! has x86 $(get_all_abis) && use hvm; then
|
||||
eerror "HVM (VT-x and AMD-v) cannot be built on this system. An x86 or"
|
||||
eerror "an amd64 multilib profile is required. Remove the hvm use flag"
|
||||
eerror "to build xen-tools on your current profile."
|
||||
die "USE=hvm is unsupported on this system."
|
||||
fi
|
||||
|
||||
if [[ -z ${XEN_TARGET_ARCH} ]] ; then
|
||||
if use x86 && use amd64; then
|
||||
die "Confusion! Both x86 and amd64 are set in your use flags!"
|
||||
elif use x86; then
|
||||
export XEN_TARGET_ARCH="x86_32"
|
||||
elif use amd64 ; then
|
||||
export XEN_TARGET_ARCH="x86_64"
|
||||
else
|
||||
die "Unsupported architecture!"
|
||||
fi
|
||||
fi
|
||||
|
||||
use api && export "LIBXENAPI_BINDINGS=y"
|
||||
use flask && export "FLASK_ENABLE=y"
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
# Drop .config, fixes to gcc-4.6
|
||||
epatch "${FILESDIR}"/${PN/-tools/}-4-fix_dotconfig-gcc.patch
|
||||
|
||||
# Xend
|
||||
if ! use xend; then
|
||||
sed -e 's:xm xen-bugtool xen-python-path xend:xen-bugtool xen-python-path:' \
|
||||
-i tools/misc/Makefile || die "Disabling xend failed"
|
||||
sed -e 's:^XEND_INITD:#XEND_INITD:' \
|
||||
-i tools/examples/Makefile || die "Disabling xend failed"
|
||||
fi
|
||||
|
||||
# if the user *really* wants to use their own custom-cflags, let them
|
||||
if use custom-cflags; then
|
||||
einfo "User wants their own CFLAGS - removing defaults"
|
||||
|
||||
# try and remove all the default cflags
|
||||
find "${S}" \( -name Makefile -o -name Rules.mk -o -name Config.mk \) \
|
||||
-exec sed \
|
||||
-e 's/CFLAGS\(.*\)=\(.*\)-O3\(.*\)/CFLAGS\1=\2\3/' \
|
||||
-e 's/CFLAGS\(.*\)=\(.*\)-march=i686\(.*\)/CFLAGS\1=\2\3/' \
|
||||
-e 's/CFLAGS\(.*\)=\(.*\)-fomit-frame-pointer\(.*\)/CFLAGS\1=\2\3/' \
|
||||
-e 's/CFLAGS\(.*\)=\(.*\)-g3*\s\(.*\)/CFLAGS\1=\2 \3/' \
|
||||
-e 's/CFLAGS\(.*\)=\(.*\)-O2\(.*\)/CFLAGS\1=\2\3/' \
|
||||
-i {} + || die "failed to re-set custom-cflags"
|
||||
fi
|
||||
|
||||
if ! use pygrub; then
|
||||
sed -e '/^SUBDIRS-$(PYTHON_TOOLS) += pygrub$/d' -i tools/Makefile || die
|
||||
fi
|
||||
|
||||
# Disable hvm support on systems that don't support x86_32 binaries.
|
||||
if ! use hvm; then
|
||||
sed -e '/^CONFIG_IOEMU := y$/d' -i config/*.mk || die
|
||||
sed -e '/SUBDIRS-$(CONFIG_X86) += firmware/d' -i tools/Makefile || die
|
||||
fi
|
||||
|
||||
# Don't bother with qemu, only needed for fully virtualised guests
|
||||
if ! use qemu; then
|
||||
sed -e "/^CONFIG_IOEMU := y$/d" -i config/*.mk || die
|
||||
sed -e "s:install-tools\: tools/ioemu-dir:install-tools\: :g" -i Makefile || die
|
||||
fi
|
||||
|
||||
# Fix texi2html build error with new texi2html, qemu.doc.html
|
||||
epatch "${FILESDIR}"/${PN}-4-docfix.patch \
|
||||
"${FILESDIR}"/${PN}-4-qemu-xen-doc.patch
|
||||
|
||||
# Fix network broadcast on bridged networks
|
||||
epatch "${FILESDIR}/${PN}-3.4.0-network-bridge-broadcast.patch"
|
||||
|
||||
# Prevent the downloading of ipxe, seabios
|
||||
epatch "${FILESDIR}"/${PN/-tools/}-4.2.0-anti-download.patch
|
||||
cp "${DISTDIR}"/ipxe.tar.gz tools/firmware/etherboot/ || die
|
||||
mv ../seabios-dir-remote tools/firmware/ || die
|
||||
pushd tools/firmware/ > /dev/null
|
||||
ln -s seabios-dir-remote seabios-dir || die
|
||||
popd > /dev/null
|
||||
|
||||
# Fix bridge by idella4, bug #362575
|
||||
epatch "${FILESDIR}/${PN}-4.1.1-bridge.patch"
|
||||
|
||||
# Don't build ipxe with pie on hardened, Bug #360805
|
||||
if gcc-specs-pie; then
|
||||
epatch "${FILESDIR}"/ipxe-nopie.patch
|
||||
fi
|
||||
|
||||
# Prevent double stripping of files at install
|
||||
epatch "${FILESDIR}"/${PN/-tools/}-4.2.0-nostrip.patch
|
||||
|
||||
# fix jobserver in Makefile
|
||||
epatch "${FILESDIR}"/${PN/-tools/}-4.2.0-jserver.patch
|
||||
|
||||
# add missing header
|
||||
epatch "${FILESDIR}"/xen-4-ulong.patch \
|
||||
"${FILESDIR}"/${PN}-4.2-xen_disk_leak.patch
|
||||
|
||||
# Set dom0-min-mem to kb; Bug #472982
|
||||
epatch "${FILESDIR}"/${PN/-tools/}-4.2-configsxp.patch
|
||||
|
||||
#Security patches, currently valid
|
||||
epatch "${FILESDIR}"/xen-4-CVE-2012-6075-XSA-41.patch \
|
||||
"${FILESDIR}"/xen-4-CVE-2013-1922-XSA-48.patch \
|
||||
"${FILESDIR}"/xen-4-CVE-2013-1952-XSA-49.patch \
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-1-XSA-55.patch \
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-2-XSA-55.patch \
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-3-XSA-55.patch \
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-4-XSA-55.patch \
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-5to7-XSA-55.patch \
|
||||
"${WORKDIR}"/files/xen-4.2-CVE-2013-8-XSA-55.patch \
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-9to10-XSA-55.patch \
|
||||
"${WORKDIR}"/files/xen-4.2-CVE-2013-11-XSA-55.patch \
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-12to13-XSA-55.patch \
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-14-XSA-55.patch \
|
||||
"${WORKDIR}"/files/xen-4.2-CVE-2013-15-XSA-55.patch \
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-16-XSA-55.patch \
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-17-XSA-55.patch \
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-18to19-XSA-55.patch \
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-20to23-XSA-55.patch \
|
||||
"${FILESDIR}"/xen-4-CVE-2013-2072-XSA-56.patch \
|
||||
"${FILESDIR}"/xen-4.2-CVE-XSA-57.patch
|
||||
|
||||
# Bug 472438
|
||||
sed -e 's:^BASH_COMPLETION_DIR ?= $(CONFIG_DIR)/bash_completion.d:BASH_COMPLETION_DIR ?= $(SHARE_DIR)/bash-completion:' \
|
||||
-i Config.mk || die
|
||||
|
||||
epatch_user
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
export VARTEXFONTS="${T}/fonts"
|
||||
local myopt
|
||||
use debug && myopt="${myopt} debug=y"
|
||||
|
||||
use custom-cflags || unset CFLAGS
|
||||
if test-flag-CC -fno-strict-overflow; then
|
||||
append-flags -fno-strict-overflow
|
||||
fi
|
||||
|
||||
unset LDFLAGS
|
||||
unset CFLAGS
|
||||
emake CC="$(tc-getCC)" LD="$(tc-getLD)" -C tools ${myopt}
|
||||
|
||||
use doc && emake -C docs txt html
|
||||
emake -C docs man-pages
|
||||
}
|
||||
|
||||
src_install() {
|
||||
# Override auto-detection in the build system, bug #382573
|
||||
export INITD_DIR=/tmp/init.d
|
||||
export CONFIG_LEAF_DIR=../tmp/default
|
||||
|
||||
# Let the build system compile installed Python modules.
|
||||
local PYTHONDONTWRITEBYTECODE
|
||||
export PYTHONDONTWRITEBYTECODE
|
||||
|
||||
emake DESTDIR="${ED}" DOCDIR="/usr/share/doc/${PF}" \
|
||||
XEN_PYTHON_NATIVE_INSTALL=y install-tools
|
||||
# Fix the remaining Python shebangs.
|
||||
python_fix_shebang "${ED}"
|
||||
|
||||
# Remove RedHat-specific stuff
|
||||
rm -rf "${ED}"tmp || die
|
||||
|
||||
# uncomment lines in xl.conf
|
||||
sed -e 's:^#autoballoon=1:autoballoon=1:' \
|
||||
-e 's:^#lockfile="/var/lock/xl":lockfile="/var/lock/xl":' \
|
||||
-e 's:^#vifscript="vif-bridge":vifscript="vif-bridge":' \
|
||||
-i tools/examples/xl.conf || die
|
||||
|
||||
# Reset bash completion dir; Bug 472438
|
||||
mv "${D}"bash-completion "${D}"usr/share/ || die
|
||||
|
||||
if use doc; then
|
||||
emake DESTDIR="${D}" DOCDIR="/usr/share/doc/${PF}" install-docs
|
||||
|
||||
dohtml -r docs/
|
||||
docinto pdf
|
||||
dodoc ${DOCS[@]}
|
||||
[ -d "${D}"/usr/share/doc/xen ] && mv "${D}"/usr/share/doc/xen/* "${D}"/usr/share/doc/${PF}/html
|
||||
fi
|
||||
|
||||
rm -rf "${D}"/usr/share/doc/xen/
|
||||
doman docs/man?/*
|
||||
|
||||
if use xend; then
|
||||
newinitd "${FILESDIR}"/xend.initd-r2 xend || die "Couldn't install xen.initd"
|
||||
fi
|
||||
newconfd "${FILESDIR}"/xendomains.confd xendomains
|
||||
newconfd "${FILESDIR}"/xenstored.confd xenstored
|
||||
newconfd "${FILESDIR}"/xenconsoled.confd xenconsoled
|
||||
newinitd "${FILESDIR}"/xendomains.initd-r2 xendomains
|
||||
newinitd "${FILESDIR}"/xenstored.initd xenstored
|
||||
newinitd "${FILESDIR}"/xenconsoled.initd xenconsoled
|
||||
|
||||
if use screen; then
|
||||
cat "${FILESDIR}"/xendomains-screen.confd >> "${ED}"/etc/conf.d/xendomains || die
|
||||
cp "${FILESDIR}"/xen-consoles.logrotate "${ED}"/etc/xen/ || die
|
||||
keepdir /var/log/xen-consoles
|
||||
fi
|
||||
|
||||
if [[ "${ARCH}" == 'amd64' ]] && use qemu; then
|
||||
mkdir -p "${D}"usr/$(get_libdir)/xen/bin || die
|
||||
mv "${D}"usr/lib/xen/bin/qemu* "${D}"usr/$(get_libdir)/xen/bin/ || die
|
||||
fi
|
||||
|
||||
# For -static-libs wrt Bug 384355
|
||||
if ! use static-libs; then
|
||||
rm -f "${ED}"usr/$(get_libdir)/*.a "${ED}"usr/$(get_libdir)/ocaml/*/*.a
|
||||
fi
|
||||
|
||||
# xend expects these to exist
|
||||
keepdir /var/run/xenstored /var/lib/xenstored /var/xen/dump /var/lib/xen /var/log/xen
|
||||
|
||||
# for xendomains
|
||||
keepdir /etc/xen/auto
|
||||
|
||||
# Temp QA workaround
|
||||
dodir "$(udev_get_udevdir)"
|
||||
mv "${ED}"/etc/udev/* "${ED}/$(udev_get_udevdir)"
|
||||
rm -rf "${ED}"/etc/udev
|
||||
|
||||
# Remove files failing QA AFTER emake installs them, avoiding seeking absent files
|
||||
find "${ED}" \( -name openbios-sparc32 -o -name openbios-sparc64 \
|
||||
-o -name openbios-ppc -o -name palcode-clipper \) -delete || die
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
elog "Official Xen Guide and the offical wiki page:"
|
||||
elog "http://www.gentoo.org/doc/en/xen-guide.xml"
|
||||
elog "http://wiki.xen.org/wiki/Main_Page"
|
||||
|
||||
if [[ "$(scanelf -s __guard -q "${PYTHON}")" ]] ; then
|
||||
echo
|
||||
ewarn "xend may not work when python is built with stack smashing protection (ssp)."
|
||||
ewarn "If 'xm create' fails with '<ProtocolError for /RPC2: -1 >', see bug #141866"
|
||||
ewarn "This problem may be resolved as of Xen 3.0.4, if not post in the bug."
|
||||
fi
|
||||
|
||||
# TODO: we need to have the current Python slot here.
|
||||
if ! has_version "dev-lang/python[ncurses]"; then
|
||||
echo
|
||||
ewarn "NB: Your dev-lang/python is built without USE=ncurses."
|
||||
ewarn "Please rebuild python with USE=ncurses to make use of xenmon.py."
|
||||
fi
|
||||
|
||||
if has_version "sys-apps/iproute2[minimal]"; then
|
||||
echo
|
||||
ewarn "Your sys-apps/iproute2 is built with USE=minimal. Networking"
|
||||
ewarn "will not work until you rebuild iproute2 without USE=minimal."
|
||||
fi
|
||||
|
||||
if ! use hvm; then
|
||||
echo
|
||||
elog "HVM (VT-x and AMD-V) support has been disabled. If you need hvm"
|
||||
elog "support enable the hvm use flag."
|
||||
elog "An x86 or amd64 multilib system is required to build HVM support."
|
||||
echo
|
||||
elog "The qemu use flag has been removed and replaced with hvm."
|
||||
fi
|
||||
|
||||
if use xend; then
|
||||
echo
|
||||
elog "xend capability has been enabled and installed"
|
||||
fi
|
||||
|
||||
if grep -qsF XENSV= "${ROOT}/etc/conf.d/xend"; then
|
||||
echo
|
||||
elog "xensv is broken upstream (Gentoo bug #142011)."
|
||||
elog "Please remove '${ROOT%/}/etc/conf.d/xend', as it is no longer needed."
|
||||
fi
|
||||
}
|
|
@ -1,414 +0,0 @@
|
|||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/xen-tools/xen-tools-4.2.2-r7.ebuild,v 1.1 2014/02/13 07:59:09 dlan Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
PYTHON_COMPAT=( python{2_6,2_7} )
|
||||
PYTHON_REQ_USE='xml,threads'
|
||||
|
||||
IPXE_TARBALL_URL="http://dev.gentoo.org/~idella4/tarballs/ipxe.tar.gz"
|
||||
XEN_SEABIOS_URL="http://dev.gentoo.org/~idella4/tarballs/seabios-0-20121121.tar.bz2"
|
||||
XSAPATCHES="http://dev.gentoo.org/~idella4/"
|
||||
if [[ $PV == *9999 ]]; then
|
||||
KEYWORDS=""
|
||||
REPO="xen-unstable.hg"
|
||||
EHG_REPO_URI="http://xenbits.xensource.com/${REPO}"
|
||||
S="${WORKDIR}/${REPO}"
|
||||
live_eclass="mercurial"
|
||||
else
|
||||
KEYWORDS="~amd64 ~x86"
|
||||
SRC_URI="http://bits.xensource.com/oss-xen/release/${PV}/xen-${PV}.tar.gz
|
||||
$IPXE_TARBALL_URL
|
||||
$XEN_SEABIOS_URL
|
||||
$XSAPATCHES/patches/XSA-55patches.tar.gz"
|
||||
S="${WORKDIR}/xen-${PV}"
|
||||
fi
|
||||
|
||||
inherit bash-completion-r1 eutils flag-o-matic multilib python-single-r1 toolchain-funcs udev ${live_eclass}
|
||||
|
||||
DESCRIPTION="Xend daemon and tools"
|
||||
HOMEPAGE="http://xen.org/"
|
||||
DOCS=( README docs/README.xen-bugtool )
|
||||
|
||||
LICENSE="GPL-2"
|
||||
SLOT="0"
|
||||
IUSE="api custom-cflags debug doc flask hvm qemu ocaml pygrub screen static-libs xend"
|
||||
|
||||
REQUIRED_USE="hvm? ( qemu )
|
||||
${PYTHON_REQUIRED_USE}"
|
||||
|
||||
DEPEND="dev-libs/lzo:2
|
||||
dev-libs/glib:2
|
||||
dev-libs/yajl
|
||||
dev-libs/libgcrypt
|
||||
dev-python/lxml[${PYTHON_USEDEP}]
|
||||
dev-python/pypam[${PYTHON_USEDEP}]
|
||||
sys-libs/zlib
|
||||
sys-power/iasl
|
||||
dev-ml/findlib
|
||||
hvm? ( media-libs/libsdl )
|
||||
${PYTHON_DEPS}
|
||||
api? ( dev-libs/libxml2
|
||||
net-misc/curl )
|
||||
${PYTHON_DEPS}
|
||||
pygrub? ( ${PYTHON_DEPS//${PYTHON_REQ_USE}/ncurses} )
|
||||
sys-devel/bin86
|
||||
sys-devel/dev86
|
||||
dev-lang/perl
|
||||
app-misc/pax-utils
|
||||
doc? (
|
||||
app-doc/doxygen
|
||||
dev-tex/latex2html[png,gif]
|
||||
media-gfx/transfig
|
||||
media-gfx/graphviz
|
||||
dev-tex/xcolor
|
||||
dev-texlive/texlive-latexextra
|
||||
virtual/latex-base
|
||||
dev-tex/latexmk
|
||||
dev-texlive/texlive-latex
|
||||
dev-texlive/texlive-pictures
|
||||
dev-texlive/texlive-latexrecommended
|
||||
)
|
||||
hvm? ( x11-proto/xproto
|
||||
!net-libs/libiscsi )"
|
||||
RDEPEND="sys-apps/iproute2
|
||||
net-misc/bridge-utils
|
||||
ocaml? ( >=dev-lang/ocaml-4 )
|
||||
screen? (
|
||||
app-misc/screen
|
||||
app-admin/logrotate
|
||||
)
|
||||
virtual/udev"
|
||||
|
||||
# hvmloader is used to bootstrap a fully virtualized kernel
|
||||
# Approved by QA team in bug #144032
|
||||
QA_WX_LOAD="usr/lib/xen/boot/hvmloader"
|
||||
|
||||
RESTRICT="test"
|
||||
|
||||
XSA_PATCHES=(
|
||||
"${FILESDIR}"/xen-4-CVE-2012-6075-XSA-41.patch
|
||||
"${FILESDIR}"/xen-4-CVE-2013-1922-XSA-48.patch
|
||||
"${FILESDIR}"/xen-4-CVE-2013-1952-XSA-49.patch
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-1-XSA-55.patch
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-2-XSA-55.patch
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-3-XSA-55.patch
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-4-XSA-55.patch
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-5to7-XSA-55.patch
|
||||
"${WORKDIR}"/files/xen-4.2-CVE-2013-8-XSA-55.patch
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-9to10-XSA-55.patch
|
||||
"${WORKDIR}"/files/xen-4.2-CVE-2013-11-XSA-55.patch
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-12to13-XSA-55.patch
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-14-XSA-55.patch
|
||||
"${WORKDIR}"/files/xen-4.2-CVE-2013-15-XSA-55.patch
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-16-XSA-55.patch
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-17-XSA-55.patch
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-18to19-XSA-55.patch
|
||||
"${FILESDIR}"/xen-4.2-CVE-2013-20to23-XSA-55.patch
|
||||
"${FILESDIR}"/xen-4-CVE-2013-2072-XSA-56.patch
|
||||
"${FILESDIR}"/xen-4.2-CVE-XSA-57.patch
|
||||
"${FILESDIR}"/${PN}-4-CVE-2013-4369-XSA-68.patch
|
||||
"${FILESDIR}"/${PN}-4-CVE-2013-4370-XSA-69.patch
|
||||
"${FILESDIR}"/${PN}-4-CVE-2013-4371-XSA-70.patch
|
||||
"${FILESDIR}"/${PN}-4-CVE-2013-4416-XSA-72.patch
|
||||
"${FILESDIR}"/${PN/-tools/}-4-CVE-XSA-86.patch #bug #500530
|
||||
"${FILESDIR}"/${PN}-4-CVE-2014-1950-XSA-88.patch #bug #501080
|
||||
)
|
||||
|
||||
pkg_setup() {
|
||||
python-single-r1_pkg_setup
|
||||
export "CONFIG_LOMOUNT=y"
|
||||
|
||||
if has_version dev-libs/libgcrypt; then
|
||||
export "CONFIG_GCRYPT=y"
|
||||
fi
|
||||
|
||||
if use qemu; then
|
||||
export "CONFIG_IOEMU=y"
|
||||
else
|
||||
export "CONFIG_IOEMU=n"
|
||||
fi
|
||||
|
||||
if ! use x86 && ! has x86 $(get_all_abis) && use hvm; then
|
||||
eerror "HVM (VT-x and AMD-v) cannot be built on this system. An x86 or"
|
||||
eerror "an amd64 multilib profile is required. Remove the hvm use flag"
|
||||
eerror "to build xen-tools on your current profile."
|
||||
die "USE=hvm is unsupported on this system."
|
||||
fi
|
||||
|
||||
if [[ -z ${XEN_TARGET_ARCH} ]] ; then
|
||||
if use x86 && use amd64; then
|
||||
die "Confusion! Both x86 and amd64 are set in your use flags!"
|
||||
elif use x86; then
|
||||
export XEN_TARGET_ARCH="x86_32"
|
||||
elif use amd64 ; then
|
||||
export XEN_TARGET_ARCH="x86_64"
|
||||
else
|
||||
die "Unsupported architecture!"
|
||||
fi
|
||||
fi
|
||||
|
||||
use api && export "LIBXENAPI_BINDINGS=y"
|
||||
use flask && export "FLASK_ENABLE=y"
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
# Drop .config, fixes to gcc-4.6
|
||||
epatch "${FILESDIR}"/${PN/-tools/}-4-fix_dotconfig-gcc.patch
|
||||
|
||||
# Xend
|
||||
if ! use xend; then
|
||||
sed -e 's:xm xen-bugtool xen-python-path xend:xen-bugtool xen-python-path:' \
|
||||
-i tools/misc/Makefile || die "Disabling xend failed"
|
||||
sed -e 's:^XEND_INITD:#XEND_INITD:' \
|
||||
-i tools/examples/Makefile || die "Disabling xend failed"
|
||||
fi
|
||||
|
||||
# if the user *really* wants to use their own custom-cflags, let them
|
||||
if use custom-cflags; then
|
||||
einfo "User wants their own CFLAGS - removing defaults"
|
||||
|
||||
# try and remove all the default cflags
|
||||
find "${S}" \( -name Makefile -o -name Rules.mk -o -name Config.mk \) \
|
||||
-exec sed \
|
||||
-e 's/CFLAGS\(.*\)=\(.*\)-O3\(.*\)/CFLAGS\1=\2\3/' \
|
||||
-e 's/CFLAGS\(.*\)=\(.*\)-march=i686\(.*\)/CFLAGS\1=\2\3/' \
|
||||
-e 's/CFLAGS\(.*\)=\(.*\)-fomit-frame-pointer\(.*\)/CFLAGS\1=\2\3/' \
|
||||
-e 's/CFLAGS\(.*\)=\(.*\)-g3*\s\(.*\)/CFLAGS\1=\2 \3/' \
|
||||
-e 's/CFLAGS\(.*\)=\(.*\)-O2\(.*\)/CFLAGS\1=\2\3/' \
|
||||
-i {} + || die "failed to re-set custom-cflags"
|
||||
fi
|
||||
|
||||
if ! use pygrub; then
|
||||
sed -e '/^SUBDIRS-$(PYTHON_TOOLS) += pygrub$/d' -i tools/Makefile || die
|
||||
fi
|
||||
|
||||
# Disable hvm support on systems that don't support x86_32 binaries.
|
||||
if ! use hvm; then
|
||||
sed -e '/^CONFIG_IOEMU := y$/d' -i config/*.mk || die
|
||||
sed -e '/SUBDIRS-$(CONFIG_X86) += firmware/d' -i tools/Makefile || die
|
||||
fi
|
||||
|
||||
# Don't bother with qemu, only needed for fully virtualised guests
|
||||
if ! use qemu; then
|
||||
sed -e "/^CONFIG_IOEMU := y$/d" -i config/*.mk || die
|
||||
sed -e "s:install-tools\: tools/ioemu-dir:install-tools\: :g" -i Makefile || die
|
||||
fi
|
||||
|
||||
# Fix texi2html build error with new texi2html, qemu.doc.html
|
||||
epatch "${FILESDIR}"/${PN}-4-docfix.patch \
|
||||
"${FILESDIR}"/${PN}-4-qemu-xen-doc.patch
|
||||
|
||||
# Fix network broadcast on bridged networks
|
||||
epatch "${FILESDIR}/${PN}-3.4.0-network-bridge-broadcast.patch"
|
||||
|
||||
# Prevent the downloading of ipxe, seabios
|
||||
epatch "${FILESDIR}"/${PN/-tools/}-4.2.0-anti-download.patch
|
||||
cp "${DISTDIR}"/ipxe.tar.gz tools/firmware/etherboot/ || die
|
||||
mv ../seabios-dir-remote tools/firmware/ || die
|
||||
pushd tools/firmware/ > /dev/null
|
||||
ln -s seabios-dir-remote seabios-dir || die
|
||||
popd > /dev/null
|
||||
|
||||
# Fix bridge by idella4, bug #362575
|
||||
epatch "${FILESDIR}/${PN}-4.1.1-bridge.patch"
|
||||
|
||||
# Don't build ipxe with pie on hardened, Bug #360805
|
||||
if gcc-specs-pie; then
|
||||
epatch "${FILESDIR}"/ipxe-nopie.patch
|
||||
fi
|
||||
|
||||
# Prevent double stripping of files at install
|
||||
epatch "${FILESDIR}"/${PN/-tools/}-4.2.0-nostrip.patch
|
||||
|
||||
# fix jobserver in Makefile
|
||||
epatch "${FILESDIR}"/${PN/-tools/}-4.2.0-jserver.patch
|
||||
|
||||
# add missing header
|
||||
epatch "${FILESDIR}"/xen-4-ulong.patch \
|
||||
"${FILESDIR}"/${PN}-4.2-xen_disk_leak.patch
|
||||
|
||||
# Set dom0-min-mem to kb; Bug #472982
|
||||
epatch "${FILESDIR}"/${PN/-tools/}-4.2-configsxp.patch
|
||||
|
||||
# Bug 463840
|
||||
epatch "${FILESDIR}"/${P}-install.patch
|
||||
epatch "${FILESDIR}"/${P}-rt-link.patch
|
||||
|
||||
[[ ${XSA_PATCHES[@]} ]] && epatch "${XSA_PATCHES[@]}"
|
||||
|
||||
# Bug 472438
|
||||
sed -e 's:^BASH_COMPLETION_DIR ?= $(CONFIG_DIR)/bash_completion.d:BASH_COMPLETION_DIR ?= $(SHARE_DIR)/bash-completion:' \
|
||||
-i Config.mk || die
|
||||
|
||||
# Bug 445986
|
||||
sed -e 's:$(MAKE) PYTHON=$(PYTHON) subdirs-$@:LC_ALL=C "$(MAKE)" PYTHON=$(PYTHON) subdirs-$@:' -i tools/firmware/Makefile || die
|
||||
|
||||
# Bug 379537
|
||||
epatch "${FILESDIR}"/fix-gold-ld.patch
|
||||
|
||||
# fix QA warning, create /var/run/, /var/lock dynamically
|
||||
sed -i -e "/\$(INSTALL_DIR) \$(DESTDIR)\$(XEN_RUN_DIR)/d" \
|
||||
tools/libxl/Makefile || die
|
||||
|
||||
sed -i -e "/\/var\/run\//d" \
|
||||
tools/xenstore/Makefile \
|
||||
tools/pygrub/Makefile || die
|
||||
|
||||
sed -i -e "/\/var\/lock\/subsys/d" \
|
||||
tools/Makefile || die
|
||||
|
||||
# xencommons, Bug #492332, sed lighter weight than patching
|
||||
sed -e 's:\$QEMU_XEN -xen-domid:test -e "\$QEMU_XEN" \&\& &:' \
|
||||
-i tools/hotplug/Linux/init.d/xencommons || die
|
||||
|
||||
epatch_user
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
export VARTEXFONTS="${T}/fonts"
|
||||
local myopt
|
||||
use debug && myopt="${myopt} debug=y"
|
||||
|
||||
use custom-cflags || unset CFLAGS
|
||||
if test-flag-CC -fno-strict-overflow; then
|
||||
append-flags -fno-strict-overflow
|
||||
fi
|
||||
|
||||
unset LDFLAGS
|
||||
unset CFLAGS
|
||||
emake V=1 CC="$(tc-getCC)" LD="$(tc-getLD)" AR="$(tc-getAR)" RANLIB="$(tc-getRANLIB)" -C tools ${myopt}
|
||||
|
||||
use doc && emake -C docs txt html
|
||||
emake -C docs man-pages
|
||||
}
|
||||
|
||||
src_install() {
|
||||
# Override auto-detection in the build system, bug #382573
|
||||
export INITD_DIR=/tmp/init.d
|
||||
export CONFIG_LEAF_DIR=../tmp/default
|
||||
|
||||
# Let the build system compile installed Python modules.
|
||||
local PYTHONDONTWRITEBYTECODE
|
||||
export PYTHONDONTWRITEBYTECODE
|
||||
|
||||
emake DESTDIR="${ED}" DOCDIR="/usr/share/doc/${PF}" install-tools \
|
||||
XEN_PYTHON_NATIVE_INSTALL=y install-tools
|
||||
# Fix the remaining Python shebangs.
|
||||
python_fix_shebang "${ED}"
|
||||
|
||||
# Remove RedHat-specific stuff
|
||||
rm -rf "${D}"tmp || die
|
||||
|
||||
# uncomment lines in xl.conf
|
||||
sed -e 's:^#autoballoon=1:autoballoon=1:' \
|
||||
-e 's:^#lockfile="/var/lock/xl":lockfile="/var/lock/xl":' \
|
||||
-e 's:^#vifscript="vif-bridge":vifscript="vif-bridge":' \
|
||||
-i tools/examples/xl.conf || die
|
||||
|
||||
# Reset bash completion dir; Bug 472438
|
||||
mv "${D}"bash-completion "${D}"usr/share/ || die
|
||||
|
||||
if use doc; then
|
||||
emake DESTDIR="${D}" DOCDIR="/usr/share/doc/${PF}" install-docs
|
||||
|
||||
dohtml -r docs/
|
||||
docinto pdf
|
||||
dodoc ${DOCS[@]}
|
||||
[ -d "${D}"/usr/share/doc/xen ] && mv "${D}"/usr/share/doc/xen/* "${D}"/usr/share/doc/${PF}/html
|
||||
fi
|
||||
|
||||
rm -rf "${D}"/usr/share/doc/xen/
|
||||
doman docs/man?/*
|
||||
|
||||
if use xend; then
|
||||
newinitd "${FILESDIR}"/xend.initd-r2 xend || die "Couldn't install xen.initd"
|
||||
fi
|
||||
newconfd "${FILESDIR}"/xendomains.confd xendomains
|
||||
newconfd "${FILESDIR}"/xenstored.confd xenstored
|
||||
newconfd "${FILESDIR}"/xenconsoled.confd xenconsoled
|
||||
newinitd "${FILESDIR}"/xendomains.initd-r2 xendomains
|
||||
newinitd "${FILESDIR}"/xenstored.initd xenstored
|
||||
newinitd "${FILESDIR}"/xenconsoled.initd xenconsoled
|
||||
newinitd "${FILESDIR}"/xencommons.initd xencommons
|
||||
newconfd "${FILESDIR}"/xencommons.confd xencommons
|
||||
|
||||
if use screen; then
|
||||
cat "${FILESDIR}"/xendomains-screen.confd >> "${ED}"/etc/conf.d/xendomains || die
|
||||
cp "${FILESDIR}"/xen-consoles.logrotate "${ED}"/etc/xen/ || die
|
||||
keepdir /var/log/xen-consoles
|
||||
fi
|
||||
|
||||
if [[ "${ARCH}" == 'amd64' ]] && use qemu; then
|
||||
mkdir -p "${D}"usr/$(get_libdir)/xen/bin || die
|
||||
mv "${D}"usr/lib/xen/bin/qemu* "${D}"usr/$(get_libdir)/xen/bin/ || die
|
||||
fi
|
||||
|
||||
# For -static-libs wrt Bug 384355
|
||||
if ! use static-libs; then
|
||||
rm -f "${D}"usr/$(get_libdir)/*.a "${D}"usr/$(get_libdir)/ocaml/*/*.a
|
||||
fi
|
||||
|
||||
# xend expects these to exist
|
||||
keepdir /var/run/xenstored /var/lib/xenstored /var/xen/dump /var/lib/xen /var/log/xen
|
||||
|
||||
# for xendomains
|
||||
keepdir /etc/xen/auto
|
||||
|
||||
# Temp QA workaround
|
||||
dodir "$(udev_get_udevdir)"
|
||||
mv "${D}"/etc/udev/* "${D}/$(udev_get_udevdir)"
|
||||
rm -rf "${D}"/etc/udev
|
||||
|
||||
# Remove files failing QA AFTER emake installs them, avoiding seeking absent files
|
||||
find "${D}" \( -name openbios-sparc32 -o -name openbios-sparc64 \
|
||||
-o -name openbios-ppc -o -name palcode-clipper \) -delete || die
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
elog "Official Xen Guide and the offical wiki page:"
|
||||
elog "http://www.gentoo.org/doc/en/xen-gu"${D}"usr/ide.xml"
|
||||
elog "http://wiki.xen.org/wiki/Main_Page"
|
||||
elog ""
|
||||
elog "Recommended to utilise the xencommons script to config sytem at boot."
|
||||
elog "Add by use of rc-update on completion of the install"
|
||||
|
||||
if [[ "$(scanelf -s __guard -q "${PYTHON}")" ]] ; then
|
||||
echo
|
||||
ewarn "xend may not work when python is built with stack smashing protection (ssp)."
|
||||
ewarn "If 'xm create' fails with '<ProtocolError for /RPC2: -1 >', see bug #141866"
|
||||
ewarn "This problem may be resolved as of Xen 3.0.4, if not post in the bug."
|
||||
fi
|
||||
|
||||
# TODO: we need to have the current Python slot here.
|
||||
if ! has_version "dev-lang/python[ncurses]"; then
|
||||
echo
|
||||
ewarn "NB: Your dev-lang/python is built without USE=ncurses."
|
||||
ewarn "Please rebuild python with USE=ncurses to make use of xenmon.py."
|
||||
fi
|
||||
|
||||
if has_version "sys-apps/iproute2[minimal]"; then
|
||||
echo
|
||||
ewarn "Your sys-apps/iproute2 is built with USE=minimal. Networking"
|
||||
ewarn "will not work until you rebuild iproute2 without USE=minimal."
|
||||
fi
|
||||
|
||||
if ! use hvm; then
|
||||
echo
|
||||
elog "HVM (VT-x and AMD-V) support has been disabled. If you need hvm"
|
||||
elog "support enable the hvm use flag."
|
||||
elog "An x86 or amd64 multilib system is required to build HVM support."
|
||||
fi
|
||||
|
||||
if use xend; then
|
||||
echo
|
||||
elog "xend capability has been enabled and installed"
|
||||
fi
|
||||
|
||||
if grep -qsF XENSV= "${ROOT}/etc/conf.d/xend"; then
|
||||
echo
|
||||
elog "xensv is broken upstream (Gentoo bug #142011)."
|
||||
elog "Please remove '${ROOT%/}/etc/conf.d/xend', as it is no longer needed."
|
||||
fi
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/xen-tools/xen-tools-4.2.3-r1.ebuild,v 1.3 2014/02/20 10:24:16 ago Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/xen-tools/xen-tools-4.2.3-r1.ebuild,v 1.5 2014/02/21 04:49:13 idella4 Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
|
@ -19,12 +19,12 @@ else
|
|||
GENTOO_VER=
|
||||
|
||||
[[ -n ${UPSTREAM_VER} ]] && \
|
||||
UPSTRAM_PATCHSET_URI="http://dev.gentoo.org/~dlan/distfiles/${P/-tools/}-upstream-patches-${UPSTREAM_VER}.tar.xz"
|
||||
UPSTREAM_PATCHSET_URI="http://dev.gentoo.org/~dlan/distfiles/${P/-tools/}-upstream-patches-${UPSTREAM_VER}.tar.xz"
|
||||
[[ -n ${GENTOO_VER} ]] && \
|
||||
GENTOO_PATCHSET_URI="http://dev.gentoo.org/~dlan/distfiles/${P/-tools/}-gentoo-patches-${GENTOO_VER}.tar.xz"
|
||||
|
||||
SRC_URI="http://bits.xensource.com/oss-xen/release/${PV}/xen-${PV}.tar.gz
|
||||
${UPSTRAM_PATCHSET_URI}
|
||||
${UPSTREAM_PATCHSET_URI}
|
||||
${GENTOO_PATCHSET_URI}"
|
||||
S="${WORKDIR}/xen-${PV}"
|
||||
fi
|
||||
|
@ -233,7 +233,6 @@ src_prepare() {
|
|||
# Bug 445986
|
||||
sed -e 's:$(MAKE) PYTHON=$(PYTHON) subdirs-$@:LC_ALL=C "$(MAKE)" PYTHON=$(PYTHON) subdirs-$@:' -i tools/firmware/Makefile || die
|
||||
|
||||
|
||||
# fix QA warning, create /var/run/, /var/lock dynamically
|
||||
sed -i -e "/\$(INSTALL_DIR) \$(DESTDIR)\$(XEN_RUN_DIR)/d" \
|
||||
tools/libxl/Makefile || die
|
||||
|
|
|
@ -1,406 +0,0 @@
|
|||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/xen-tools/xen-tools-4.2.3.ebuild,v 1.1 2014/02/14 10:17:46 dlan Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
PYTHON_COMPAT=( python{2_6,2_7} )
|
||||
PYTHON_REQ_USE='xml,threads'
|
||||
|
||||
IPXE_TARBALL_URL="http://dev.gentoo.org/~idella4/tarballs/ipxe.tar.gz"
|
||||
XEN_SEABIOS_URL="http://dev.gentoo.org/~idella4/tarballs/seabios-0-20121121.tar.bz2"
|
||||
XSAPATCHES="http://dev.gentoo.org/~idella4/"
|
||||
if [[ $PV == *9999 ]]; then
|
||||
KEYWORDS=""
|
||||
REPO="xen-unstable.hg"
|
||||
EHG_REPO_URI="http://xenbits.xensource.com/${REPO}"
|
||||
S="${WORKDIR}/${REPO}"
|
||||
live_eclass="mercurial"
|
||||
else
|
||||
KEYWORDS="~amd64 ~x86"
|
||||
UPSTREAM_VER=0
|
||||
GENTOO_VER=
|
||||
|
||||
[[ -n ${UPSTREAM_VER} ]] && \
|
||||
UPSTRAM_PATCHSET_URI="http://dev.gentoo.org/~dlan/distfiles/${P/-tools/}-upstream-patches-${UPSTREAM_VER}.tar.xz"
|
||||
[[ -n ${GENTOO_VER} ]] && \
|
||||
GENTOO_PATCHSET_URI="http://dev.gentoo.org/~dlan/distfiles/${P/-tools/}-gentoo-patches-${GENTOO_VER}.tar.xz"
|
||||
|
||||
SRC_URI="http://bits.xensource.com/oss-xen/release/${PV}/xen-${PV}.tar.gz
|
||||
$IPXE_TARBALL_URL
|
||||
$XEN_SEABIOS_URL
|
||||
${UPSTRAM_PATCHSET_URI}
|
||||
${GENTOO_PATCHSET_URI}"
|
||||
S="${WORKDIR}/xen-${PV}"
|
||||
fi
|
||||
|
||||
inherit bash-completion-r1 eutils flag-o-matic multilib python-single-r1 toolchain-funcs udev ${live_eclass}
|
||||
|
||||
DESCRIPTION="Xend daemon and tools"
|
||||
HOMEPAGE="http://xen.org/"
|
||||
DOCS=( README docs/README.xen-bugtool )
|
||||
|
||||
LICENSE="GPL-2"
|
||||
SLOT="0"
|
||||
IUSE="api custom-cflags debug doc flask hvm qemu ocaml pygrub screen static-libs xend"
|
||||
|
||||
REQUIRED_USE="hvm? ( qemu )
|
||||
${PYTHON_REQUIRED_USE}"
|
||||
|
||||
DEPEND="dev-libs/lzo:2
|
||||
dev-libs/glib:2
|
||||
dev-libs/yajl
|
||||
dev-libs/libgcrypt
|
||||
dev-python/lxml[${PYTHON_USEDEP}]
|
||||
dev-python/pypam[${PYTHON_USEDEP}]
|
||||
sys-libs/zlib
|
||||
sys-power/iasl
|
||||
dev-ml/findlib
|
||||
hvm? ( media-libs/libsdl )
|
||||
${PYTHON_DEPS}
|
||||
api? ( dev-libs/libxml2
|
||||
net-misc/curl )
|
||||
${PYTHON_DEPS}
|
||||
pygrub? ( ${PYTHON_DEPS//${PYTHON_REQ_USE}/ncurses} )
|
||||
sys-devel/bin86
|
||||
sys-devel/dev86
|
||||
dev-lang/perl
|
||||
app-misc/pax-utils
|
||||
doc? (
|
||||
app-doc/doxygen
|
||||
dev-tex/latex2html[png,gif]
|
||||
media-gfx/transfig
|
||||
media-gfx/graphviz
|
||||
dev-tex/xcolor
|
||||
dev-texlive/texlive-latexextra
|
||||
virtual/latex-base
|
||||
dev-tex/latexmk
|
||||
dev-texlive/texlive-latex
|
||||
dev-texlive/texlive-pictures
|
||||
dev-texlive/texlive-latexrecommended
|
||||
)
|
||||
hvm? ( x11-proto/xproto
|
||||
!net-libs/libiscsi )"
|
||||
RDEPEND="sys-apps/iproute2
|
||||
net-misc/bridge-utils
|
||||
ocaml? ( >=dev-lang/ocaml-4 )
|
||||
screen? (
|
||||
app-misc/screen
|
||||
app-admin/logrotate
|
||||
)
|
||||
virtual/udev"
|
||||
|
||||
# hvmloader is used to bootstrap a fully virtualized kernel
|
||||
# Approved by QA team in bug #144032
|
||||
QA_WX_LOAD="usr/lib/xen/boot/hvmloader"
|
||||
|
||||
RESTRICT="test"
|
||||
|
||||
pkg_setup() {
|
||||
python-single-r1_pkg_setup
|
||||
export "CONFIG_LOMOUNT=y"
|
||||
|
||||
if has_version dev-libs/libgcrypt; then
|
||||
export "CONFIG_GCRYPT=y"
|
||||
fi
|
||||
|
||||
if use qemu; then
|
||||
export "CONFIG_IOEMU=y"
|
||||
else
|
||||
export "CONFIG_IOEMU=n"
|
||||
fi
|
||||
|
||||
if ! use x86 && ! has x86 $(get_all_abis) && use hvm; then
|
||||
eerror "HVM (VT-x and AMD-v) cannot be built on this system. An x86 or"
|
||||
eerror "an amd64 multilib profile is required. Remove the hvm use flag"
|
||||
eerror "to build xen-tools on your current profile."
|
||||
die "USE=hvm is unsupported on this system."
|
||||
fi
|
||||
|
||||
if [[ -z ${XEN_TARGET_ARCH} ]] ; then
|
||||
if use x86 && use amd64; then
|
||||
die "Confusion! Both x86 and amd64 are set in your use flags!"
|
||||
elif use x86; then
|
||||
export XEN_TARGET_ARCH="x86_32"
|
||||
elif use amd64 ; then
|
||||
export XEN_TARGET_ARCH="x86_64"
|
||||
else
|
||||
die "Unsupported architecture!"
|
||||
fi
|
||||
fi
|
||||
|
||||
use api && export "LIBXENAPI_BINDINGS=y"
|
||||
use flask && export "FLASK_ENABLE=y"
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
# Upstream's patchset
|
||||
if [[ -n ${UPSTREAM_VER} ]]; then
|
||||
EPATCH_SUFFIX="patch" \
|
||||
EPATCH_FORCE="yes" \
|
||||
epatch "${WORKDIR}"/patches-upstream
|
||||
fi
|
||||
|
||||
# Gentoo's patchset
|
||||
if [[ -n ${GENTOO_VER} ]]; then
|
||||
EPATCH_SUFFIX="patch" \
|
||||
EPATCH_FORCE="yes" \
|
||||
epatch "${WORKDIR}"/patches-gentoo
|
||||
fi
|
||||
|
||||
# Drop .config, fixes to gcc-4.6
|
||||
epatch "${FILESDIR}"/${PN/-tools/}-4-fix_dotconfig-gcc.patch
|
||||
|
||||
# Xend
|
||||
if ! use xend; then
|
||||
sed -e 's:xm xen-bugtool xen-python-path xend:xen-bugtool xen-python-path:' \
|
||||
-i tools/misc/Makefile || die "Disabling xend failed"
|
||||
sed -e 's:^XEND_INITD:#XEND_INITD:' \
|
||||
-i tools/examples/Makefile || die "Disabling xend failed"
|
||||
fi
|
||||
|
||||
# if the user *really* wants to use their own custom-cflags, let them
|
||||
if use custom-cflags; then
|
||||
einfo "User wants their own CFLAGS - removing defaults"
|
||||
|
||||
# try and remove all the default cflags
|
||||
find "${S}" \( -name Makefile -o -name Rules.mk -o -name Config.mk \) \
|
||||
-exec sed \
|
||||
-e 's/CFLAGS\(.*\)=\(.*\)-O3\(.*\)/CFLAGS\1=\2\3/' \
|
||||
-e 's/CFLAGS\(.*\)=\(.*\)-march=i686\(.*\)/CFLAGS\1=\2\3/' \
|
||||
-e 's/CFLAGS\(.*\)=\(.*\)-fomit-frame-pointer\(.*\)/CFLAGS\1=\2\3/' \
|
||||
-e 's/CFLAGS\(.*\)=\(.*\)-g3*\s\(.*\)/CFLAGS\1=\2 \3/' \
|
||||
-e 's/CFLAGS\(.*\)=\(.*\)-O2\(.*\)/CFLAGS\1=\2\3/' \
|
||||
-i {} + || die "failed to re-set custom-cflags"
|
||||
fi
|
||||
|
||||
if ! use pygrub; then
|
||||
sed -e '/^SUBDIRS-$(PYTHON_TOOLS) += pygrub$/d' -i tools/Makefile || die
|
||||
fi
|
||||
|
||||
# Disable hvm support on systems that don't support x86_32 binaries.
|
||||
if ! use hvm; then
|
||||
sed -e '/^CONFIG_IOEMU := y$/d' -i config/*.mk || die
|
||||
sed -e '/SUBDIRS-$(CONFIG_X86) += firmware/d' -i tools/Makefile || die
|
||||
fi
|
||||
|
||||
# Don't bother with qemu, only needed for fully virtualised guests
|
||||
if ! use qemu; then
|
||||
sed -e "/^CONFIG_IOEMU := y$/d" -i config/*.mk || die
|
||||
sed -e "s:install-tools\: tools/ioemu-dir:install-tools\: :g" -i Makefile || die
|
||||
fi
|
||||
|
||||
# Fix texi2html build error with new texi2html, qemu.doc.html
|
||||
epatch "${FILESDIR}"/${PN}-4-docfix.patch \
|
||||
"${FILESDIR}"/${PN}-4-qemu-xen-doc.patch
|
||||
|
||||
# Fix network broadcast on bridged networks
|
||||
epatch "${FILESDIR}/${PN}-3.4.0-network-bridge-broadcast.patch"
|
||||
|
||||
# Prevent the downloading of ipxe, seabios
|
||||
epatch "${FILESDIR}"/${PN/-tools/}-4.2.0-anti-download.patch
|
||||
cp "${DISTDIR}"/ipxe.tar.gz tools/firmware/etherboot/ || die
|
||||
mv ../seabios-dir-remote tools/firmware/ || die
|
||||
pushd tools/firmware/ > /dev/null
|
||||
ln -s seabios-dir-remote seabios-dir || die
|
||||
popd > /dev/null
|
||||
|
||||
# Fix bridge by idella4, bug #362575
|
||||
epatch "${FILESDIR}/${PN}-4.1.1-bridge.patch"
|
||||
|
||||
# Don't build ipxe with pie on hardened, Bug #360805
|
||||
if gcc-specs-pie; then
|
||||
epatch "${FILESDIR}"/ipxe-nopie.patch
|
||||
fi
|
||||
|
||||
# Prevent double stripping of files at install
|
||||
epatch "${FILESDIR}"/${PN/-tools/}-4.2.0-nostrip.patch
|
||||
|
||||
# fix jobserver in Makefile
|
||||
epatch "${FILESDIR}"/${PN/-tools/}-4.2.0-jserver.patch
|
||||
|
||||
# add missing header, Bug #467200
|
||||
epatch "${FILESDIR}"/xen-4-ulong.patch \
|
||||
"${FILESDIR}"/${PN}-4.2-xen_disk_leak.patch
|
||||
|
||||
# Set dom0-min-mem to kb; Bug #472982
|
||||
epatch "${FILESDIR}"/${PN/-tools/}-4.2-configsxp.patch
|
||||
|
||||
# Bug 463840
|
||||
epatch "${FILESDIR}"/${PN}-4.2.2-install.patch
|
||||
epatch "${FILESDIR}"/${PN}-4.2.2-rt-link.patch
|
||||
|
||||
# Bug 472438
|
||||
sed -e 's:^BASH_COMPLETION_DIR ?= $(CONFIG_DIR)/bash_completion.d:BASH_COMPLETION_DIR ?= $(SHARE_DIR)/bash-completion:' \
|
||||
-i Config.mk || die
|
||||
|
||||
# Bug 445986
|
||||
sed -e 's:$(MAKE) PYTHON=$(PYTHON) subdirs-$@:LC_ALL=C "$(MAKE)" PYTHON=$(PYTHON) subdirs-$@:' -i tools/firmware/Makefile || die
|
||||
|
||||
# Bug 379537
|
||||
epatch "${FILESDIR}"/fix-gold-ld.patch
|
||||
|
||||
# fix QA warning, create /var/run/, /var/lock dynamically
|
||||
sed -i -e "/\$(INSTALL_DIR) \$(DESTDIR)\$(XEN_RUN_DIR)/d" \
|
||||
tools/libxl/Makefile || die
|
||||
|
||||
sed -i -e "/\/var\/run\//d" \
|
||||
tools/xenstore/Makefile \
|
||||
tools/pygrub/Makefile || die
|
||||
|
||||
sed -i -e "/\/var\/lock\/subsys/d" \
|
||||
tools/Makefile || die
|
||||
|
||||
# xencommons, Bug #492332, sed lighter weight than patching
|
||||
sed -e 's:\$QEMU_XEN -xen-domid:test -e "\$QEMU_XEN" \&\& &:' \
|
||||
-i tools/hotplug/Linux/init.d/xencommons || die
|
||||
|
||||
epatch_user
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
export VARTEXFONTS="${T}/fonts"
|
||||
local myopt
|
||||
use debug && myopt="${myopt} debug=y"
|
||||
|
||||
use custom-cflags || unset CFLAGS
|
||||
if test-flag-CC -fno-strict-overflow; then
|
||||
append-flags -fno-strict-overflow
|
||||
fi
|
||||
|
||||
unset LDFLAGS
|
||||
unset CFLAGS
|
||||
emake V=1 CC="$(tc-getCC)" LD="$(tc-getLD)" AR="$(tc-getAR)" RANLIB="$(tc-getRANLIB)" -C tools ${myopt}
|
||||
|
||||
use doc && emake -C docs txt html
|
||||
emake -C docs man-pages
|
||||
}
|
||||
|
||||
src_install() {
|
||||
# Override auto-detection in the build system, bug #382573
|
||||
export INITD_DIR=/tmp/init.d
|
||||
export CONFIG_LEAF_DIR=../tmp/default
|
||||
|
||||
# Let the build system compile installed Python modules.
|
||||
local PYTHONDONTWRITEBYTECODE
|
||||
export PYTHONDONTWRITEBYTECODE
|
||||
|
||||
emake DESTDIR="${ED}" DOCDIR="/usr/share/doc/${PF}" install-tools \
|
||||
XEN_PYTHON_NATIVE_INSTALL=y install-tools
|
||||
# Fix the remaining Python shebangs.
|
||||
python_fix_shebang "${ED}"
|
||||
|
||||
# Remove RedHat-specific stuff
|
||||
rm -rf "${D}"tmp || die
|
||||
|
||||
# uncomment lines in xl.conf
|
||||
sed -e 's:^#autoballoon=1:autoballoon=1:' \
|
||||
-e 's:^#lockfile="/var/lock/xl":lockfile="/var/lock/xl":' \
|
||||
-e 's:^#vifscript="vif-bridge":vifscript="vif-bridge":' \
|
||||
-i tools/examples/xl.conf || die
|
||||
|
||||
# Reset bash completion dir; Bug 472438
|
||||
mv "${D}"bash-completion "${D}"usr/share/ || die
|
||||
|
||||
if use doc; then
|
||||
emake DESTDIR="${D}" DOCDIR="/usr/share/doc/${PF}" install-docs
|
||||
|
||||
dohtml -r docs/
|
||||
docinto pdf
|
||||
dodoc ${DOCS[@]}
|
||||
[ -d "${D}"/usr/share/doc/xen ] && mv "${D}"/usr/share/doc/xen/* "${D}"/usr/share/doc/${PF}/html
|
||||
fi
|
||||
|
||||
rm -rf "${D}"/usr/share/doc/xen/
|
||||
doman docs/man?/*
|
||||
|
||||
if use xend; then
|
||||
newinitd "${FILESDIR}"/xend.initd-r2 xend || die "Couldn't install xen.initd"
|
||||
fi
|
||||
newconfd "${FILESDIR}"/xendomains.confd xendomains
|
||||
newconfd "${FILESDIR}"/xenstored.confd xenstored
|
||||
newconfd "${FILESDIR}"/xenconsoled.confd xenconsoled
|
||||
newinitd "${FILESDIR}"/xendomains.initd-r2 xendomains
|
||||
newinitd "${FILESDIR}"/xenstored.initd xenstored
|
||||
newinitd "${FILESDIR}"/xenconsoled.initd xenconsoled
|
||||
newinitd "${FILESDIR}"/xencommons.initd xencommons
|
||||
newconfd "${FILESDIR}"/xencommons.confd xencommons
|
||||
|
||||
if use screen; then
|
||||
cat "${FILESDIR}"/xendomains-screen.confd >> "${ED}"/etc/conf.d/xendomains || die
|
||||
cp "${FILESDIR}"/xen-consoles.logrotate "${ED}"/etc/xen/ || die
|
||||
keepdir /var/log/xen-consoles
|
||||
fi
|
||||
|
||||
if [[ "${ARCH}" == 'amd64' ]] && use qemu; then
|
||||
mkdir -p "${D}"usr/$(get_libdir)/xen/bin || die
|
||||
mv "${D}"usr/lib/xen/bin/qemu* "${D}"usr/$(get_libdir)/xen/bin/ || die
|
||||
fi
|
||||
|
||||
# For -static-libs wrt Bug 384355
|
||||
if ! use static-libs; then
|
||||
rm -f "${D}"usr/$(get_libdir)/*.a "${D}"usr/$(get_libdir)/ocaml/*/*.a
|
||||
fi
|
||||
|
||||
# xend expects these to exist
|
||||
keepdir /var/run/xenstored /var/lib/xenstored /var/xen/dump /var/lib/xen /var/log/xen
|
||||
|
||||
# for xendomains
|
||||
keepdir /etc/xen/auto
|
||||
|
||||
# Temp QA workaround
|
||||
dodir "$(udev_get_udevdir)"
|
||||
mv "${D}"/etc/udev/* "${D}/$(udev_get_udevdir)"
|
||||
rm -rf "${D}"/etc/udev
|
||||
|
||||
# Remove files failing QA AFTER emake installs them, avoiding seeking absent files
|
||||
find "${D}" \( -name openbios-sparc32 -o -name openbios-sparc64 \
|
||||
-o -name openbios-ppc -o -name palcode-clipper \) -delete || die
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
elog "Official Xen Guide and the offical wiki page:"
|
||||
elog "http://www.gentoo.org/doc/en/xen-gu"${D}"usr/ide.xml"
|
||||
elog "http://wiki.xen.org/wiki/Main_Page"
|
||||
elog ""
|
||||
elog "Recommended to utilise the xencommons script to config sytem at boot."
|
||||
elog "Add by use of rc-update on completion of the install"
|
||||
|
||||
if [[ "$(scanelf -s __guard -q "${PYTHON}")" ]] ; then
|
||||
echo
|
||||
ewarn "xend may not work when python is built with stack smashing protection (ssp)."
|
||||
ewarn "If 'xm create' fails with '<ProtocolError for /RPC2: -1 >', see bug #141866"
|
||||
ewarn "This problem may be resolved as of Xen 3.0.4, if not post in the bug."
|
||||
fi
|
||||
|
||||
# TODO: we need to have the current Python slot here.
|
||||
if ! has_version "dev-lang/python[ncurses]"; then
|
||||
echo
|
||||
ewarn "NB: Your dev-lang/python is built without USE=ncurses."
|
||||
ewarn "Please rebuild python with USE=ncurses to make use of xenmon.py."
|
||||
fi
|
||||
|
||||
if has_version "sys-apps/iproute2[minimal]"; then
|
||||
echo
|
||||
ewarn "Your sys-apps/iproute2 is built with USE=minimal. Networking"
|
||||
ewarn "will not work until you rebuild iproute2 without USE=minimal."
|
||||
fi
|
||||
|
||||
if ! use hvm; then
|
||||
echo
|
||||
elog "HVM (VT-x and AMD-V) support has been disabled. If you need hvm"
|
||||
elog "support enable the hvm use flag."
|
||||
elog "An x86 or amd64 multilib system is required to build HVM support."
|
||||
fi
|
||||
|
||||
if use xend; then
|
||||
echo
|
||||
elog "xend capability has been enabled and installed"
|
||||
fi
|
||||
|
||||
if grep -qsF XENSV= "${ROOT}/etc/conf.d/xend"; then
|
||||
echo
|
||||
elog "xensv is broken upstream (Gentoo bug #142011)."
|
||||
elog "Please remove '${ROOT%/}/etc/conf.d/xend', as it is no longer needed."
|
||||
fi
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/xen-tools/xen-tools-4.2.4.ebuild,v 1.1 2014/02/19 06:54:00 dlan Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/xen-tools/xen-tools-4.2.4.ebuild,v 1.3 2014/02/21 04:49:13 idella4 Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
|
@ -19,12 +19,12 @@ else
|
|||
GENTOO_VER=
|
||||
|
||||
[[ -n ${UPSTREAM_VER} ]] && \
|
||||
UPSTRAM_PATCHSET_URI="http://dev.gentoo.org/~dlan/distfiles/${P/-tools/}-upstream-patches-${UPSTREAM_VER}.tar.xz"
|
||||
UPSTREAM_PATCHSET_URI="http://dev.gentoo.org/~dlan/distfiles/${P/-tools/}-upstream-patches-${UPSTREAM_VER}.tar.xz"
|
||||
[[ -n ${GENTOO_VER} ]] && \
|
||||
GENTOO_PATCHSET_URI="http://dev.gentoo.org/~dlan/distfiles/${P/-tools/}-gentoo-patches-${GENTOO_VER}.tar.xz"
|
||||
|
||||
SRC_URI="http://bits.xensource.com/oss-xen/release/${PV}/xen-${PV}.tar.gz
|
||||
${UPSTRAM_PATCHSET_URI}
|
||||
${UPSTREAM_PATCHSET_URI}
|
||||
${GENTOO_PATCHSET_URI}"
|
||||
S="${WORKDIR}/xen-${PV}"
|
||||
fi
|
||||
|
@ -233,7 +233,6 @@ src_prepare() {
|
|||
# Bug 445986
|
||||
sed -e 's:$(MAKE) PYTHON=$(PYTHON) subdirs-$@:LC_ALL=C "$(MAKE)" PYTHON=$(PYTHON) subdirs-$@:' -i tools/firmware/Makefile || die
|
||||
|
||||
|
||||
# fix QA warning, create /var/run/, /var/lock dynamically
|
||||
sed -i -e "/\$(INSTALL_DIR) \$(DESTDIR)\$(XEN_RUN_DIR)/d" \
|
||||
tools/libxl/Makefile || die
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/xen-tools/xen-tools-4.3.2.ebuild,v 1.1 2014/02/19 06:54:00 dlan Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/xen-tools/xen-tools-4.3.2.ebuild,v 1.3 2014/02/21 04:49:13 idella4 Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
|
@ -19,12 +19,12 @@ else
|
|||
GENTOO_VER=
|
||||
|
||||
[[ -n ${UPSTREAM_VER} ]] && \
|
||||
UPSTRAM_PATCHSET_URI="http://dev.gentoo.org/~dlan/distfiles/${P/-tools/}-upstream-patches-${UPSTREAM_VER}.tar.xz"
|
||||
UPSTREAM_PATCHSET_URI="http://dev.gentoo.org/~dlan/distfiles/${P/-tools/}-upstream-patches-${UPSTREAM_VER}.tar.xz"
|
||||
[[ -n ${GENTOO_VER} ]] && \
|
||||
GENTOO_PATCHSET_URI="http://dev.gentoo.org/~dlan/distfiles/${P/-tools/}-gentoo-patches-${GENTOO_VER}.tar.xz"
|
||||
|
||||
SRC_URI="http://bits.xensource.com/oss-xen/release/${PV}/xen-${PV}.tar.gz
|
||||
${UPSTRAM_PATCHSET_URI}
|
||||
${UPSTREAM_PATCHSET_URI}
|
||||
${GENTOO_PATCHSET_URI}"
|
||||
S="${WORKDIR}/xen-${PV}"
|
||||
fi
|
||||
|
@ -229,7 +229,6 @@ src_prepare() {
|
|||
sed -e "s:install-tools\: tools/ioemu-dir:install-tools\: :g" -i Makefile || die
|
||||
fi
|
||||
|
||||
|
||||
# Bug 472438
|
||||
sed -e 's:^BASH_COMPLETION_DIR ?= $(CONFIG_DIR)/bash_completion.d:BASH_COMPLETION_DIR ?= $(SHARE_DIR)/bash-completion:' \
|
||||
-i Config.mk || die
|
||||
|
|
|
@ -1,6 +1,14 @@
|
|||
# ChangeLog for app-emulation/xen
|
||||
# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/xen/ChangeLog,v 1.153 2014/02/20 10:25:22 ago Exp $
|
||||
# $Header: /var/cvsroot/gentoo-x86/app-emulation/xen/ChangeLog,v 1.155 2014/02/21 04:53:41 idella4 Exp $
|
||||
|
||||
21 Feb 2014; Ian Delaney <idella4@gentoo.org> xen-4.2.3.ebuild,
|
||||
xen-4.2.4.ebuild, xen-4.3.2.ebuild:
|
||||
correct typos, tidy
|
||||
|
||||
20 Feb 2014; Yixun Lan <dlan@gentoo.org> -xen-4.2.2-r1.ebuild,
|
||||
-xen-4.2.2-r4.ebuild, -xen-4.3.1-r1.ebuild, -xen-4.3.1-r4.ebuild:
|
||||
clean old versions
|
||||
|
||||
20 Feb 2014; Agostino Sarubbo <ago@gentoo.org> xen-4.2.3.ebuild:
|
||||
Stable for x86, wrt bug #500528
|
||||
|
|
|
@ -1,68 +1,35 @@
|
|||
-----BEGIN PGP SIGNED MESSAGE-----
|
||||
Hash: SHA256
|
||||
|
||||
AUX xen-4-CVE-2013-1918-XSA-45_1.patch 7179 SHA256 760d8502747f2c03fb3bf6b683994860ae99b66a2fb6bbedebcc5b440404c404 SHA512 b2c8a5fde13b00734d67ac2da7ce09020d3e21f5d6d7ce7eb65f542324f42819704bbbcb784cf064b5640a18eebab8e85d51ccc1030d7325cf42e482114ba776 WHIRLPOOL 0637bbfa579b77ab6a1b1ce15417ca0740950cb1ff4bbe9ae851c8f143e4755450cd785ede5758d45b785265e53afe81ea3705813f1fd96d79affd40cc08dffe
|
||||
AUX xen-4-CVE-2013-1918-XSA-45_2.patch 4941 SHA256 e8e20bc35017bbfa350c29cef848e294acc782c3eae8082e629b020563b3a2c1 SHA512 6f05628667c56c583abd345d59371a5da94f862744a41a49f2be0764e36878e276d79e58a20046ce303e57594984ea7551bd5c11cc55b386bb0e5f28b41ad76f WHIRLPOOL f8100dd80c9354e44c119a57eb5db0df0f81997bbe3823066bc7c31be211f083260a73402dc110f02e18855b4a9196efaa78d81dcd601e761d200ff113628090
|
||||
AUX xen-4-CVE-2013-1918-XSA-45_3.patch 2621 SHA256 8f2efcd018179ff8abdd54164980fdb0d25968017aaf91947ff0a326a132cd90 SHA512 1dc3222675380a278de67c7c8ce27df61f5376cb5ea3b0cb4965cff20ec236dbc21b1717da778a1eb366f27229d4765b209a6593ec8c2ae79b9dddab0b615246 WHIRLPOOL 1019d125c7e2a762754519472498c13ed7987cbfd0709bfe7ac5dccec7f6b6b68f86f137f5f7727e187e17fb764be532011a96eb39d0efa8b08baa945bb0c306
|
||||
AUX xen-4-CVE-2013-1918-XSA-45_4.patch 5813 SHA256 6eaefb1987f1ccf891cd68c03e9966bc7ccc6fd894ed2c366aa4a0d1f3a15459 SHA512 723478cfd9f067ba6134fabe480dd9e1d11321f9c7b62f94cf572010d35ac5ef412ee885a020f2b03e7c2baff2fbafcdc48c8ac0426331c508197c4c8c536f8f WHIRLPOOL 48fe9fdfcc93644554066053b72be390f41f4f63be845a8e2b0ed379a33ae489c97ec12063ff7aeb8600dd348850d87efc372e5be709be2d045302ea144b0785
|
||||
AUX xen-4-CVE-2013-1918-XSA-45_5.patch 6257 SHA256 406e3bd7147fea805bdf6f201bc17322cd2cd662ede094b1a039ba71b095bb3e SHA512 976e5f72380921e89feb16c5aa5209a56a4b61f76676bca9ed15d7af787df5901a77f35e5d3506087ff9be259170636872218b7a755add938bb8b36b0a976203 WHIRLPOOL 71e3df3b62c6a007aebc3a0c732653bee22ecda4cb3cc6ff041a4db2de9ff16cbb8648389f645846d29cb6405c54e6f85db5334624ef764c925482a74a276179
|
||||
AUX xen-4-CVE-2013-1918-XSA-45_6.patch 4291 SHA256 6e4344e3dcb544537bbef869a34cff38a4611cddc34d18469633d3b3d35db78b SHA512 a2da3415c07c77b8c38d52bc32b04ced955f272f4294572375ba16465aaed8a4a66ea0dd8034ef67e1f6e293b82f58988ec306908b7df6a86ee1c52890f47ca4 WHIRLPOOL 12c736899b40f7cad75fac5ab575b759160dcc0bf1ba9ca766c50258072bf20324f3663f60e3c7ed75323fdb91fab12390373d749d451ee68cfe72bb2ca70a93
|
||||
AUX xen-4-CVE-2013-1918-XSA-45_7.patch 8129 SHA256 7fca1b6025d6ac1a444333b2fe1381af093ca601ac8045f68a29c2a83d520e48 SHA512 7f8fab52ca4aa361729eeb21f977fe1237f6b94b8f35e5d37ea783c60d7053da9a975af20c07c2cd1d21d52880121a5ea83ed0abd3ec2a38a75caee797489096 WHIRLPOOL 567cfd129d6347c95cd08d296053d043430b0c2ff157991a899b205c68b421614d4a8829eed8ff2748fb107b485db11b5d04599cd2a4c4bd5e225fe9821919a4
|
||||
AUX xen-4-XSA-83.patch 598 SHA256 71ba62c024ed867f99f335ed63d7e04a7981d348cc29a3718e5c48f15a1e0fb1 SHA512 8ca0f9e896da10ad32b93e7dfa908550180912b0f1eeb8be214f54fb6cc6c7a925df26db6521a37430e5e66c31e3eafb8a7169ff92097adaff7227cb95759c14 WHIRLPOOL b7369455f0dbcb37c3a3b7afe8de1e47e3303ead0a37c7e2ae13c5ebd66031bbfca21b6f4fb8a1191e32ef17a5fe74564c93ec7861f4a8d7dbc815fecfb6e068
|
||||
AUX xen-4-fix_dotconfig-gcc.patch 1525 SHA256 943119cde08d16d05a927a85fb54ee4cee323cb4870dd0d90a552051fedc9907 SHA512 aa507594d96159c4e01ccfc4781f9afe7b6fe125c9df5925128c002f28fdf04999954b523cc53c6d7eaa49cb6e05120605f4e7d6f8bab6d5718d73a60b5accea WHIRLPOOL 6f4395203199b8037363ed56256e12f426f0c26f449c5e4a001c5454370a0e412f18cd03099866c30592ee0413556b85b3c374efb7172212db37ff3891c004af
|
||||
AUX xen-4.2-2013-2076-XSA-52to54.patch 5214 SHA256 47c6609b32e6cebb73070a8b5767dc3bf44f2a73c8a5a1bfe41bbc9ac86981c1 SHA512 9f1a7fec53bf2d07667f0cb9a209cf3013e75b2881c5cae78ec5c3584994bb674034c77b9acbf5947c9d798276d50f2a5c09683afcae27741227abfb819e5ca9 WHIRLPOOL 53a62257456f8cdf8363dfafec0321c02547d04d1e084dc9c57307afc152765f3ec20de3cdc74e62eda88932e6e1ae647c8d3820f9214d2630aba6d7c22d9416
|
||||
AUX xen-4.2-CVE-2013-1432-XSA-58.patch 4630 SHA256 974d6495089b0168ff528d89009ddb5856dbeab5a2b366a412a58d8de574377c SHA512 d082d96adf31bf2507e96425081baeeb5ed7b639e4c41c295ec7e7d7a7617214883999a81890add93c7c833665ed1e3aa8fbce63b14260c00ddb41ffd37d00c4 WHIRLPOOL e2c744548500fe481094aad40c16c85477edef17610ac15849ee0a70c9577802000b31b7353b71b91434818477c20f2835a7072f73e5c5c98a12112e87c3aa59
|
||||
AUX xen-4.2-CVE-2013-4553-XSA-74.patch 1499 SHA256 0f7d0bbfbd7f3f1b6f6005321fa45081524dad438587f691e6892cc393327f89 SHA512 cbcc6e8dd5cb9b1b699e5acd17ece100739e37d3c752f54320fda4526a79bd8280e24a1c7bd6fec32756d3602b5efdcdf274f9608b9850bbd0afe324c9152be1 WHIRLPOOL 5a4b34c7ebedb0f6e2114cfaddafa38cd160d43f9e0037387871c013ec9574d9a9c4541027e64f8cfb90a370879a7f7553bc5813f7252179fe065236aec80fda
|
||||
AUX xen-4.2-XSA-84.patch 4943 SHA256 433f3c8a202482c51a48dc0e9e47ac8751d1c0d0759b7bcd22804e1856279a89 SHA512 b22b6d35b32384b49121958cab5b85bce7f46d4d00f238d0142a09e4844f24c837a86ae8673c703d44146458902bbe6e1608829099b216c48a80e5d2a368e3d4 WHIRLPOOL 51bbe7fa567040fbea228040fe8ec1638e5edb542d849f0051c114a14b61a296a19c6d09c31a1dae9fd502903484a1f7333cc5821a1f61f983443c5401b7032a
|
||||
AUX xen-4.2-XSA-85.patch 948 SHA256 20571024e6815eeb40d2f92a3d70ae699047cffafb5431ec74b652e0843a5315 SHA512 43312c06ebba91a6ec1b343072c159cb1d488cc3cd2b5104b4ab210b9d157cf56f06d95514eef17433ea38c65d42fb3ebda16f8c6a6ca94b57ecbba001a6294b WHIRLPOOL 3854c41ef9f1e21d723d13f94cfd3d7f236c3348c49cf0affe162664d94c3e6bb9a6befc2f9e0959b0033af0a06cd1461474fdf10018b8a267c05a059f52c531
|
||||
AUX xen-4.2-XSA-87.patch 616 SHA256 df9c1507d7bb0e5266a2fadd992d1e6ed0f7bf5be7466b8a93ed3bd8e3ab8e8d SHA512 819afdaefbf9d9033df6ffb0b0bc2e556e583fe64152f280d7cb9a7e4735239eb90eaec0b1d3a798ccb2c8f72c23ef4e8e04eb8ff5892be1e8128094370e0427 WHIRLPOOL b797fdb7844da641913414815716173c0d60e48b4304df5231ad5958c1d1690fbe04ea45158e380afbc2767303649551ff0dbec03142a8d95bdab5da60320dc4
|
||||
AUX xen-4.2-efi.patch 2216 SHA256 0886961e2656fe7e140dd0ac0e6620d4c14ef0796b8f8889bda163e2a9f8db8b SHA512 ecaa4f1f1c3ca737931fe5343529708dfb7ec7040dbf2acf2b155e7c7f019ce3e2630ddb302213570a2647fe220dbf23eb6c28618d6b1be9161e25fcadd71cb4 WHIRLPOOL 63b56e22683b2755ae17e7871c1b535d750f655ff8c003979d039654f5ef3303457b5d4469f216c1744202d4d1f4561f7498c1d93171ab1110a93e3a2fa8db8d
|
||||
AUX xen-4.3-CVE-2013-4553-XSA-74.patch 1389 SHA256 b505cdba662b1b1cd91d5611fac998c6b4e89e366780c6b9864b6965075afb38 SHA512 fc0c1a1777a751096bc5990eee04e754deed2f18b8c8a5d65bf19c71ba9788599369f51e2d518f613e8cea8cb0d2d22ad60cec4d1b8805d7bd8e0818a54afb2b WHIRLPOOL e324f4922f61a22840ac0268fe2643a0fe496409d12a5797d7ba057ecd4982f8a9224e20615721c34680d45145d3933090ca1a11644cd2ca8f312995c3cba96f
|
||||
AUX xen-4.3-CVE-2013-6375-XSA-75.patch 1748 SHA256 039a74a4ccd1f17a5fd5341d160af87b14875dc1b2e46d8e4d337581031228d8 SHA512 195d147643b626ab9265d83ba2d7fbdef7b5716533682b723f32cbbbde6089fafb49e11c68ba6d323bb120fb0d34d85caf5ec5759048f60ba9096e479729c32b WHIRLPOOL eb52b7334ead997fea54810498be22bf47bcd2230a2ea2552b6125f3f78b5f9f9df49a7625c43ed700b3e56c6ea8979171e6be2e6d54d53c706517fc901d4702
|
||||
AUX xen-4.3-CVE-2014-263-XSA-84-85.patch 6086 SHA256 91725c156bae4209f1401b38a37c1a38941ef6e9370ac3425523555fde81d835 SHA512 c26f9b3ecdb2894a72033850a532e0d9b735ba8e73c3cfc379171ec17c8f82e07596e6bd9824242702645d77e37054c0668279ad55effe10461d70e0831c39e8 WHIRLPOOL 94d0bf7fdc5064b0463344e1a09c81d9a41ab5c565c88accc511c547ed4ab3c0c7ac76443eab02c4b0153552ec2dc139da10960c5a8944aa9b49cee03160a911
|
||||
AUX xen-4.3-XSA-87.patch 916 SHA256 a13ce270b177d33537d627b85471abaa01215cd458541f4c6524914d7c81eb38 SHA512 a1ad45f8311787ac0e1ed1a186f9c4e9aea924398ec7bbbc5b1e4b2d3b4617e113b385ff2aee854458270b0d73ed11defac5dfe603b1fd7b97f4c951def559b3 WHIRLPOOL b3a36c01d4e0bca3c5df42488f9bfc91e756af8c899d7414b81b7dac2bb60733555321b607ed229817ac546ebce65fddce0f8781909d7021d19b44a931fb85bf
|
||||
AUX xen-4.3-fix_dotconfig-gcc.patch 8854 SHA256 4e0d22acdb4ecc4a1d418ec91bc6ddb9ef1c283ee3ca1f67bac85d3116d76ccc SHA512 b4c969b0cf166862ea5c5cb0912d7dae8c5bf7befd6dd6bdf4e56df8a4daf85c0a36c94247053f74edc0f24b1c15a18e7ddae9d24ad28d54b726a1fbbab442be WHIRLPOOL de7b614ae486fd2cc591b405b475745b003c638c9be4c8153b61a368802af36d2a2974d1e022eb14fb58ad9260f9f82c438c84cb65c3499076c579f7e1c3e6ad
|
||||
AUX xen-CVE-2013-1442-XSA-62.patch 1350 SHA256 364577f317a714099c068eb1ab771643ada99b5067fdd1eb5149fa5db649b856 SHA512 4738a229a6f18d670da07b3acbaf6e227af5fb3e7b0b414dc98671be02208aefc66ebe07f7396d9158d0fa15993b9d418fd65747880c64694b1a06b8be961419 WHIRLPOOL 758aed345d0c5792a5d5a53200ef5094e662be507823010bb7dcfcccd07bc38b897d67295abf2d5d5b3f1b93efc9c684af78da6e3e3d77ecb65ef69fe2f5fa6d
|
||||
AUX xen-CVE-2013-4355-XSA-63.patch 5872 SHA256 32fa93d8ebdfbe85931c52010bf9e561fdae8846462c5b1f2fbc217ca36f3005 SHA512 f972de0910dff2109fc18911eeaf789963ec457d2a21029abc9615088d2c8446028effec6c1c01e080ae3479e704175e19040c09053c8ad60c0b38c7d2ec3859 WHIRLPOOL 186fcc663d6025164fc38d9aa5faf2272aaf6d3a7f2f8ba831fac28e672958776ae80cf3e92a9d6c99230bc80c6a4c83d5fa313225d4ba5594e06e1ad55e732f
|
||||
AUX xen-CVE-2013-4356-XSA-64.patch 2401 SHA256 551c5b7afabc1ce10fcb2138a1d7f272dbf5482e339b005b18d9a2ca38b045b0 SHA512 d5da58e37ab6fae508b95cc3798f7d679ed3b9b58c28b453d6ff31716e75e31c186fcfb21f88e6981daef718f67e24a9a2a3eea6a9945d24e84332d8ce4e68ef WHIRLPOOL 9e3c3d9d86a1e334591351002b79557005ca3e5dea75610b64d19e741f74cf7f75184b062df7d174000b0f38c98fe7a62d99cdebe94ebbc949902e55fcecaa04
|
||||
AUX xen-CVE-2013-4361-XSA-66.patch 839 SHA256 3a9b6bf114eb19d708b68dd5973763ac83b57840bc0f6fbd1fe487797eaffed4 SHA512 5abc6cb7685a9053e67c1646c6d9e06c25da6d6c7004e63e346e7b082270e1319fcc8a194a8db4e9c9cb903fe5dc29ae17169cda6fea94913fa9e0ff5aa9b451 WHIRLPOOL b98cf8aa37d259d8c5ec5cffd22ba78b5674948268e75349b3e867589052409c1872f0aa72f5cd9a1d8c44fdb74d3bfb97596bfa6ac2d201565275b6203f5095
|
||||
AUX xen-CVE-2013-4368-XSA-67.patch 1307 SHA256 7de3ac9baa6cd9fead46e68912dfa0189e900095317645d0e33d85346fc8a028 SHA512 959e4760210ceb480da53c709fcdeed4bd9cec27eefbcdb7dfcf6d764184e5ecf4c225f817d8a46ff0bb74baa8d14d90c9ce39bb51c9a781cbc524227b02e153 WHIRLPOOL ee7dad69b15ecfc8636e56b2373660777ce594fcef6ee2b863b9cf3a4badf269d3214f193374addbee678a80f3bbbfb416189d78edb426baa6d25ac5df748637
|
||||
AUX xen-CVE-2013-4375-XSA-71.patch 1628 SHA256 f1ef802098be2220ec1c0e0d20ff5385d34036b8cd312001dcc0e17fbe25f8d1 SHA512 9d057827933decc046506c46e1a482424169cc8d525ac49a39b296181615a4525383851e990fd3d46995db2f8261d92dc7955354cdf6ca15db8cbb89def17c6d WHIRLPOOL d1749db3dcceb5221dad395e2caede633456a304d922070096889b4b7d8e79bcda5fe4f7c8cb3e5f1e6c9dae349ef744d98290f286cbfc3737b0ff62f198e2a8
|
||||
AUX xen-CVE-2013-4494-XSA-73.patch 3723 SHA256 1c070e66d1bea3c109f22ea4db2e8828f0f4b016d51d6d88667b775eec340514 SHA512 d14be9077685aec682f2cfa23886bc430fe55d985650e5392da0988f69f242ac0fa242c84448e8203ab6dd1b44904a2f38ad9e8976a829100193a1c06efb8417 WHIRLPOOL 96a15f94eed123a5ff53193c8dcf708aa17d21b3ebe23b5fc50b7ecbdf64ed4f827252389cc15249d05041d036853053f3846b3fea3538fc8724fe828ca57bde
|
||||
AUX xen-CVE-2013-4554-XSA-76.patch 556 SHA256 8c4d460c71e8e8dffa32ce24f57ce872ccd8623ab72fd38be432f0a2b097e7c1 SHA512 4bfd4dfc560629968a81b4f9b7509d8366208ca6d7987f27da44a41caa840437f623ed5ab489c9a1623c99ba9e702a5d647aa833961ed7d4ab72d0141258d6a4 WHIRLPOOL 6a7020ff3df9020a716b3ecdd3dd11869025e7205c17a9314a8f2705812b1a9e6fd4a19d891d00ca5c750456f4c871317c0ec451ab84db3c985c57e92ecb47d4
|
||||
AUX xen-CVE-2013-6375-XSA-78.patch 926 SHA256 63aeab44272c17d079c9b8e22732c8c31e767236bb0ceb73d9f6226c5ae31d35 SHA512 d6aa117c570881015bdb93efaaf386fc4f141ef012017ab0a51bd63a024f5e9eef3856243235533d46ac7b67bffd10e0913a06f65e194581a6a70cbd6a6bf5ca WHIRLPOOL 16b04f8191b2243c05541742a98dface491ebe8db47e050eb14e74352182bfd02a86867c1ad644b3cef209008cfbb5d0499073447fbef49c5de129e1bdf519d6
|
||||
AUX xen-CVE-2013-6400-XSA-80.patch 2072 SHA256 d15e627c59dd48e1cacb2fbcd5e2148975daa426df1f693b991d69201c048e77 SHA512 119d4a183c8a56496b337bb5c797e63df99ac88f879d0700e6ed4573a21901dd45fbc997cbaa8d4d635da574eb46ceb6d91a846cfb20b6d0a0b42381cfb9144c WHIRLPOOL 217c68bbe0b179a0f81fd591b546389a21f82acc3d60b5bdf1d6323263ce4a6ceb18d45dc0089c3758f179937b50816f1d53287f9b9b6486b4303e92df6d9cb3
|
||||
AUX xen-CVE-2013-6885-XSA-82.patch 1447 SHA256 db47b9dcb2124995754e7b43d7eedb5aae5c6d2dda6d43d313751b419ffd12e7 SHA512 f62b9bf0aae1eb22a551fc98d74f5baec391589be5252d472aa9b30012f426a7302063b02ceb3bc9b3fe88c67033eb771a4112727052ed3f9b5dc9d39f47f39d WHIRLPOOL 38678c9c32bc172a675bd0351a81743b92bbf72cbd14a29cc1a7ef15b8149bd4841816425142defdebc233a2dc58281e893533053e6310173ad3a5573233d1f5
|
||||
DIST xen-4.2.2.tar.gz 15602746 SHA256 c9bfe91a5e72f8545acebad9889d64368020359bfe18044c0e683133e55ae005 SHA512 4943b18016ed8c2b194a3b55e6655b3b734b39ffb8cb7ee0a0580f2f4460a1d0e92e1de8ac23f5186272914fad1650586af51fd7c3644d0310eb16f2e11c5e80 WHIRLPOOL 519eb87cb2da694696cbc3e72070a0a3bdb07c46fa266d855d8379eec3a92adfa4d434af3ac01c37834ce4a9174081a6c40030b185a70902329b185cb8d0bbea
|
||||
DIST xen-4.2.3-upstream-patches-0.tar.xz 84436 SHA256 7c2477b9b29c9d84bb26ed60bfc2700f2a614ed8040b93906e801831f3498b41 SHA512 a4e8b53a0efb9d64d4dc65ee3107422c8007537e03f9c8e6f1b2c838cf62e6819d447c1ed44aacb5c4e9979f0dad7ed313d2db61df6e6ad2d7708a81964a7e12 WHIRLPOOL cc3c2224bba3b2e5f057ec95f9e85e58b17bc0dce338da429c7970877967cddf69228258ff491be9c1d022169a90fcde34ef1bcb0c198c9123ca219707a5a99f
|
||||
DIST xen-4.2.3.tar.gz 15613235 SHA256 69b6a73701383d609ad094a38925004e8595755fb39a6fafd579ba754e8667db SHA512 01521c8724354f92a2555683a8b103e5e16aedeb2c6166cc3ce40a0cc6cd9e07a601aa24930bb7391e00eb97f04003e6523dead09382cf86eb56f5b886509b9a WHIRLPOOL e7f7848ad632e5e77db95b2eb37c82f31a73021af4b6bb44091cc14103faa193bc2d6deb089e2a196daab5a08dbc08f135a8937a25a4ff5d31fe37c789bae1e9
|
||||
DIST xen-4.2.4.tar.gz 15663999 SHA256 e23e6292affd7a6d82da99527e8bf3964e57eb7322144c67c2025692b1a21550 SHA512 3e5263511e7c40899f580f3384bd987f9c875b8e6816202fd1a5a64fe7e336803d09e58148af074938ef261f0ceeafad121ac541ddd2bf66b76c5aa4ad07c357 WHIRLPOOL 25d23f5d921139ba0f853fcd76ae998647d32292bccfd4e7c4f3b12f860a38fbb33ebda67c839657bf3a25d837c9c02b80d663362263d16d42284ffde09f0bc2
|
||||
DIST xen-4.3.1.tar.gz 16429423 SHA256 3b5b7cc508b1739753585b5c25635471cdcef680e8770a78bf6ef9333d26a9fd SHA512 f5250ad5ad3defc5dc1207eb6208a3928128ef57ac4162018bd92b750dc1df1eaaf37835528aca33a0f9e04c82d5f8c4ba79c03a1780d2b72cbb90cc26f77275 WHIRLPOOL 087390786cea9aee273a5d81988436303991aa5ea92faf111d3b619517368f8c8feef84f4f8c602cac723980a344eb90414887db4ca88a2ee14bc6b0253e36ca
|
||||
DIST xen-4.3.2.tar.gz 16472188 SHA256 17611d95f955302560ff72d97c08933b4e62bc2e8ffb71400fc54e388746ff69 SHA512 ec94d849b56ec590b89022075ce43768d8ef44b7be9580ce032509b44c085f0f66495845607a18cd3dea6b89c69bc2a18012705556f59288cd8653c3e5eca302 WHIRLPOOL 72250369fb2c90ba608e1da018cb6417b3089642c8ba59af9f2825ec5ba7c4e6c5d6f86140b20825817e4625727c6d58c5d38b00863c994e31c8a04927997bd3
|
||||
EBUILD xen-4.2.2-r1.ebuild 3756 SHA256 2ad7f2faed080ea2e4d991d7dd902826059e4a22b444e2f1b74b5bc1e54d50a2 SHA512 c6041bf852ffa425d93134e9c08334c71e96dc9cb795c8bc7a5eb485fa46d55f5de61ff9db55d484cbe0b641d9e850e4eb7c0eefd1b021ed21a050e1e78c4177 WHIRLPOOL 86e7873cc84b01064c1e7cd46003a43104257a3f7330a1433d85ce841b658a0a35e18f9284b8520a497b408d4b5ab6ce76cb1af67fb42019b86517f4b51f2d61
|
||||
EBUILD xen-4.2.2-r4.ebuild 4188 SHA256 b141799dd9644b3db75f52b849a1610c0a68db78a9188a6df7700ccdb90e4404 SHA512 26d6201b9fedafa9219bdccad75e8e0985d5dcfa2c4b5e133c2861848725f06784e3ac57cc6ea524c2b4697281cbe288fc8fcfd4357948e73b57d5f4dcbd8337 WHIRLPOOL 6d7c030927b19c99904b59f4d1f0796b2fcfa3857a0217959c718c5c45b7b2f467905f6bb425095a686b87d7c52d635886ff322c861301e509a4f54cb7c724ec
|
||||
EBUILD xen-4.2.3.ebuild 4206 SHA256 3f512a5c18718406642045b29ddbc48fb4335c58b597685ca5c0b874d7b8e7c7 SHA512 8db1157adb3a1eb266678c8afcb7c5d9bcf2a11afb06997797011e274918f51bda20c1f1bd7cd43cfa71b4843041823e04e29a679f7c9b420f0363877ce538f9 WHIRLPOOL 66e68c39479600b986496d5bb6c98602a8ecdde02266b4673ee66b84e160eb3c70ffec07224c7415f610c974331c85e87c145a7e4300537baa5aff7f81c15720
|
||||
EBUILD xen-4.2.4.ebuild 4208 SHA256 d833fce1323c30ff8799c3edcb69a5ac3e55622f6db058dd127ce62490e469b3 SHA512 e839e36c15d94408d111b01b8e6003c4107a196b564c89f6bc694751a84ea32d6f1f561c2c1da9111d804be8ec236ec5bccaf4ac25f5f3c1f510392861cf4f0a WHIRLPOOL cf3d54a317c2ddc84264e3b1a017834c2f149d9888a94ca6696fd9743e007f252d79233e14a0c1aa69f36269a65473fa86b23c5c884d30ee08839d6364b1c939
|
||||
EBUILD xen-4.3.1-r1.ebuild 3901 SHA256 a94af83d0bb8ffcebd66223309818da75c60507ae2c9e803eac7488fd3970de9 SHA512 12ea99f6475d9c40c00b3aae81ba620a28fd65f72e93c93c5cd516e61966a6fc3d7a5b17919cb2704e08c9ff354b9d7fa610c461ff71ec99e11eed82ad7735f5 WHIRLPOOL 0c8ba609acb43bdc3df00b1298519b1bbabb941f032f43a6b386b5570da83767d929fbd1ef07e2b5a80b538544fcd2ec1cd0807f4f58840b6f7d7e25205fafc4
|
||||
EBUILD xen-4.3.1-r4.ebuild 4046 SHA256 ca2891ecaba07397c621ac68746be1d40159cdd5f1b57d38a1db28d9fdeff1ca SHA512 d9af0ff66b69e43b5853ebe389a86beb02950a4c7be7d083c2dacda4ff2f05bc502e5a665304430659bc64b88057ec3d550688a43474b05e4d01fad8763df213 WHIRLPOOL ed60050e57c54a43094a33bb3f9bb6a9b7ca5d8df88e1c4ef0b474ec6fb3834b55488a1a1ce1a8c2058dcc1226eca6660bc8ca7aafc74b20cd9d786883deb5aa
|
||||
EBUILD xen-4.2.3.ebuild 4212 SHA256 f09e7ea233bef41c17089ca7a046c6944f214e81907fb09ee0940e3735bed992 SHA512 d9d42dabf5114fb259c22eb6cd2b1a956cabbaf18131dcb562c23dcd55698607ae5049667c954f4454bb6adb0cfc46054bb23215cf5bf29ec16aeb13b85d46f2 WHIRLPOOL 935e22e705fc0364c41bb18b4780a435de2e8c48bb1fb8f6ebfa501f486f03f03c064bfc77d045afb961d4bfc2db1e12b276bbbbfece359cd54885df822016be
|
||||
EBUILD xen-4.2.4.ebuild 4213 SHA256 99be813c840774024cff83f02b0d2bb7d9e479882d60d48aa114ea302e576379 SHA512 e5ed5103ac91a0fd1acb1209db063c2b145e45f5e171f235499acad5faaf571e4b06c80113fa0f4e7d891df31c331159403b28a8c470122d27f1246bf2920f9b WHIRLPOOL 43b307924681ffaf7f31647b490091e6ec25909fe73548e3b215b2457706a407050bdf1684ce13f825a58272e37a977b6dc202083567329c80b487941e691dd5
|
||||
EBUILD xen-4.3.1-r5.ebuild 4118 SHA256 acac2edea0a26f1025254f754e864e386e70488d9d0d7d9a5743552c61022b9b SHA512 c75f3cee4665776b2f350101f7cde6efa916c45976ee1f690a4d0ed07cffd051d0bfdc0cc006b7f0a463e747a5cc7b41900ecbaa1ab32505f0fefd68811c610f WHIRLPOOL e6a4eda3889fbb94430ddc50be50cb71a3a292595dd19399d14d1bcdd06f19ea40bdc3c0a926cd8791c3af9cb883bb3564a35acd1ca647aed2b4cd179261871a
|
||||
EBUILD xen-4.3.2.ebuild 4102 SHA256 b731dc04d1cfb6d354420388dc79ae166b6f707fca840e49ba28579c8d06963e SHA512 f38bd957b3fe0d0ec1567f47d0388f8ad878072df8d8b49d892ad0cc928553b33fc724f5e1f42f42155e9b4518a98442308930f69350b1519aa863ac0309419d WHIRLPOOL ba361cc30d89c2d2df6cbe8e1f127bab3c4584fdc6a22ae756b46f9b757f6cb950551e2ed5a221146ad7ca84aee18a4a77ccbfddde6ba6151312e578db260ab7
|
||||
MISC ChangeLog 28046 SHA256 0731acd2e896315c5df2df0610d64fc5734210e3f196c16fb2b46e878bad1c3b SHA512 6e47348d60ea818691bd5fc335b8cdf3977f38cab419a20034d532da072d277277e6ddbf5927421ee0e7ea8d7b2b0580411ba1101515e338f02ebdf5b52cc666 WHIRLPOOL be9a311d5718626fc979ff6f94ebb57fa6dd3912dca2efe54341e626a6e967f62f69335dcade637aaab491869e71f7883c972b34e7b9210fca2043c293c6844c
|
||||
EBUILD xen-4.3.2.ebuild 4107 SHA256 ffd84a6285e31ab05435e2143522c00ddd71683e9199a82189db406be8b0703f SHA512 2ece621e74731ae5a41b4de59b0a68be449941a12e0464cca4c5664e14f9f75cce3f109829c4d3c0adb3558c5b39a5f73b6b924c2e32e348b885258def75aa1f WHIRLPOOL bc4da56fdd53440a1a85ce1a872d39a30ec460e0ce0b8726cfc54c6aea42854b8e2691d53d49abc3140526d9a1884d113fa7e0ca40022f04c63c756a4face81a
|
||||
MISC ChangeLog 28332 SHA256 35fe6917922426c6cd99c498ab7805b7e21c6beb36ea2731ea065028d1a0d19c SHA512 bb20d1c890fa3a1102b181c0c70affa0f0f73797718b842b3945a7de7f56ff9aec4842656b8b51a51cc2c921401b7bb4adc44dd6abe783d6363be5bb9ca2447f WHIRLPOOL 93a57b93e1459802c779aa507b7ba9e4307fd50ccc9e229390ddeb990a5f62d206a5b784c82d272c712e114e8fc713dfb99f6d2ecc7f821dd4d1d49dd6eafc4f
|
||||
MISC metadata.xml 480 SHA256 c6d867148db1480748552aea9692bdee95fb98a94fcfadab0d128cbf1102b0d5 SHA512 888aa860cbb74d79c76f096107d8b22975470373ab11249da2c4ae9c4e172bc52fee73fdfaf07c19e977cabbbdf35ea5b3c6508d4a6f555b771ab6729806fe5c WHIRLPOOL c4d10589ca2c8b4e8bbd877dfc8f4f3b66ce8ae7bece71617e9571f07a39270f54c41f5fbbb2b29020ffc6473e2341064bd708813af3e20a31d5b9bd0510ebe2
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v2.0.22 (GNU/Linux)
|
||||
|
||||
iQIcBAEBCAAGBQJTBdgUAAoJELp701BxlEWf20kP/RpDUqVoVz8E/PG6zs/4YnJV
|
||||
su2ATULXinmj4li/S6wD40z0AmNEx7JjRukxAx1pxZchIor1jmof8x77+vQGkfO/
|
||||
DvuGSSGfq0QsnSVlJ3RvnaWIuhbHkCucL6hW3psQqow0FmvkeCYW1ZAMOkzeD3gv
|
||||
JJF0cBc+pXCywDEkY5ludJirTtvEAMgyNw7/2qxvgsrWRBPivO0xbWS7LKe2Hbbn
|
||||
7EqCrOZyH/4dRh1Q69iKgZ4EH4FHul2LVYgtesdpX3t9siJzs0Y4UMwnFpddz0n+
|
||||
bew7LXOSa7g96LlRRA2MHGaHLrr4P110R4Bhcqd3V850dydtmxOuZmYozLr22C9A
|
||||
z/rCKuct0HAb8ssFandgAwSmW44VRhJ7oVciXXjtmYyMYVBSdIG2+qcjXTmizSDD
|
||||
Yf6c+/CsACVT+SXb8YAhozWCfaFwd78bwAIFvjH605e6i9M3gt4eoo1nbH/Ms+hf
|
||||
fMDHRaw0r3yGLQGu92GZUEhhLbJD0O9Zju3D4ez3LIHo4qXahhLcFT3LyVOsLIhH
|
||||
BkFJBM1wzUwFGf6i1ZIg0jXfuTa5A5Mh7+peeWstWyxiXSOL/U1cIrQ9qMGkM6kC
|
||||
4Q7wzM+O2T2OiKOOuU/D+TpiTOUwAi0urrUUOR13/PJzxbg0rI1tPXPiwe7LvCTs
|
||||
zQcbf7jFUGU1qMWtG3Dr
|
||||
=OqGr
|
||||
iEYEAREIAAYFAlMG2lQACgkQso7CE7gHKw2p+wCgqZQsXHchIF6ig+5NmkoN1kGk
|
||||
nDwAoIU+UsF0GspoUcZwk9qbyQoQC/7j
|
||||
=ZcWd
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
|
@ -1,252 +0,0 @@
|
|||
x86: make vcpu_destroy_pagetables() preemptible
|
||||
|
||||
... as it may take significant amounts of time.
|
||||
|
||||
The function, being moved to mm.c as the better home for it anyway, and
|
||||
to avoid having to make a new helper function there non-static, is
|
||||
given a "preemptible" parameter temporarily (until, in a subsequent
|
||||
patch, its other caller is also being made capable of dealing with
|
||||
preemption).
|
||||
|
||||
This is part of CVE-2013-1918 / XSA-45.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Acked-by: Tim Deegan <tim@xen.org>
|
||||
|
||||
--- a/xen/arch/x86/domain.c
|
||||
+++ b/xen/arch/x86/domain.c
|
||||
@@ -73,8 +73,6 @@ void (*dead_idle) (void) __read_mostly =
|
||||
static void paravirt_ctxt_switch_from(struct vcpu *v);
|
||||
static void paravirt_ctxt_switch_to(struct vcpu *v);
|
||||
|
||||
-static void vcpu_destroy_pagetables(struct vcpu *v);
|
||||
-
|
||||
static void default_idle(void)
|
||||
{
|
||||
local_irq_disable();
|
||||
@@ -1058,7 +1056,7 @@ void arch_vcpu_reset(struct vcpu *v)
|
||||
if ( !is_hvm_vcpu(v) )
|
||||
{
|
||||
destroy_gdt(v);
|
||||
- vcpu_destroy_pagetables(v);
|
||||
+ vcpu_destroy_pagetables(v, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2069,63 +2067,6 @@ static int relinquish_memory(
|
||||
return ret;
|
||||
}
|
||||
|
||||
-static void vcpu_destroy_pagetables(struct vcpu *v)
|
||||
-{
|
||||
- struct domain *d = v->domain;
|
||||
- unsigned long pfn;
|
||||
-
|
||||
-#ifdef __x86_64__
|
||||
- if ( is_pv_32on64_vcpu(v) )
|
||||
- {
|
||||
- pfn = l4e_get_pfn(*(l4_pgentry_t *)
|
||||
- __va(pagetable_get_paddr(v->arch.guest_table)));
|
||||
-
|
||||
- if ( pfn != 0 )
|
||||
- {
|
||||
- if ( paging_mode_refcounts(d) )
|
||||
- put_page(mfn_to_page(pfn));
|
||||
- else
|
||||
- put_page_and_type(mfn_to_page(pfn));
|
||||
- }
|
||||
-
|
||||
- l4e_write(
|
||||
- (l4_pgentry_t *)__va(pagetable_get_paddr(v->arch.guest_table)),
|
||||
- l4e_empty());
|
||||
-
|
||||
- v->arch.cr3 = 0;
|
||||
- return;
|
||||
- }
|
||||
-#endif
|
||||
-
|
||||
- pfn = pagetable_get_pfn(v->arch.guest_table);
|
||||
- if ( pfn != 0 )
|
||||
- {
|
||||
- if ( paging_mode_refcounts(d) )
|
||||
- put_page(mfn_to_page(pfn));
|
||||
- else
|
||||
- put_page_and_type(mfn_to_page(pfn));
|
||||
- v->arch.guest_table = pagetable_null();
|
||||
- }
|
||||
-
|
||||
-#ifdef __x86_64__
|
||||
- /* Drop ref to guest_table_user (from MMUEXT_NEW_USER_BASEPTR) */
|
||||
- pfn = pagetable_get_pfn(v->arch.guest_table_user);
|
||||
- if ( pfn != 0 )
|
||||
- {
|
||||
- if ( !is_pv_32bit_vcpu(v) )
|
||||
- {
|
||||
- if ( paging_mode_refcounts(d) )
|
||||
- put_page(mfn_to_page(pfn));
|
||||
- else
|
||||
- put_page_and_type(mfn_to_page(pfn));
|
||||
- }
|
||||
- v->arch.guest_table_user = pagetable_null();
|
||||
- }
|
||||
-#endif
|
||||
-
|
||||
- v->arch.cr3 = 0;
|
||||
-}
|
||||
-
|
||||
int domain_relinquish_resources(struct domain *d)
|
||||
{
|
||||
int ret;
|
||||
@@ -2143,7 +2084,11 @@ int domain_relinquish_resources(struct d
|
||||
|
||||
/* Drop the in-use references to page-table bases. */
|
||||
for_each_vcpu ( d, v )
|
||||
- vcpu_destroy_pagetables(v);
|
||||
+ {
|
||||
+ ret = vcpu_destroy_pagetables(v, 1);
|
||||
+ if ( ret )
|
||||
+ return ret;
|
||||
+ }
|
||||
|
||||
if ( !is_hvm_domain(d) )
|
||||
{
|
||||
--- a/xen/arch/x86/mm.c
|
||||
+++ b/xen/arch/x86/mm.c
|
||||
@@ -2808,6 +2808,82 @@ static void put_superpage(unsigned long
|
||||
|
||||
#endif
|
||||
|
||||
+static int put_old_guest_table(struct vcpu *v)
|
||||
+{
|
||||
+ int rc;
|
||||
+
|
||||
+ if ( !v->arch.old_guest_table )
|
||||
+ return 0;
|
||||
+
|
||||
+ switch ( rc = put_page_and_type_preemptible(v->arch.old_guest_table, 1) )
|
||||
+ {
|
||||
+ case -EINTR:
|
||||
+ case -EAGAIN:
|
||||
+ return -EAGAIN;
|
||||
+ }
|
||||
+
|
||||
+ v->arch.old_guest_table = NULL;
|
||||
+
|
||||
+ return rc;
|
||||
+}
|
||||
+
|
||||
+int vcpu_destroy_pagetables(struct vcpu *v, bool_t preemptible)
|
||||
+{
|
||||
+ unsigned long mfn = pagetable_get_pfn(v->arch.guest_table);
|
||||
+ struct page_info *page;
|
||||
+ int rc = put_old_guest_table(v);
|
||||
+
|
||||
+ if ( rc )
|
||||
+ return rc;
|
||||
+
|
||||
+#ifdef __x86_64__
|
||||
+ if ( is_pv_32on64_vcpu(v) )
|
||||
+ mfn = l4e_get_pfn(*(l4_pgentry_t *)mfn_to_virt(mfn));
|
||||
+#endif
|
||||
+
|
||||
+ if ( mfn )
|
||||
+ {
|
||||
+ page = mfn_to_page(mfn);
|
||||
+ if ( paging_mode_refcounts(v->domain) )
|
||||
+ put_page(page);
|
||||
+ else
|
||||
+ rc = put_page_and_type_preemptible(page, preemptible);
|
||||
+ }
|
||||
+
|
||||
+#ifdef __x86_64__
|
||||
+ if ( is_pv_32on64_vcpu(v) )
|
||||
+ {
|
||||
+ if ( !rc )
|
||||
+ l4e_write(
|
||||
+ (l4_pgentry_t *)__va(pagetable_get_paddr(v->arch.guest_table)),
|
||||
+ l4e_empty());
|
||||
+ }
|
||||
+ else
|
||||
+#endif
|
||||
+ if ( !rc )
|
||||
+ {
|
||||
+ v->arch.guest_table = pagetable_null();
|
||||
+
|
||||
+#ifdef __x86_64__
|
||||
+ /* Drop ref to guest_table_user (from MMUEXT_NEW_USER_BASEPTR) */
|
||||
+ mfn = pagetable_get_pfn(v->arch.guest_table_user);
|
||||
+ if ( mfn )
|
||||
+ {
|
||||
+ page = mfn_to_page(mfn);
|
||||
+ if ( paging_mode_refcounts(v->domain) )
|
||||
+ put_page(page);
|
||||
+ else
|
||||
+ rc = put_page_and_type_preemptible(page, preemptible);
|
||||
+ }
|
||||
+ if ( !rc )
|
||||
+ v->arch.guest_table_user = pagetable_null();
|
||||
+#endif
|
||||
+ }
|
||||
+
|
||||
+ v->arch.cr3 = 0;
|
||||
+
|
||||
+ return rc;
|
||||
+}
|
||||
|
||||
int new_guest_cr3(unsigned long mfn)
|
||||
{
|
||||
@@ -2994,12 +3070,21 @@ long do_mmuext_op(
|
||||
unsigned int foreigndom)
|
||||
{
|
||||
struct mmuext_op op;
|
||||
- int rc = 0, i = 0, okay;
|
||||
unsigned long type;
|
||||
- unsigned int done = 0;
|
||||
+ unsigned int i = 0, done = 0;
|
||||
struct vcpu *curr = current;
|
||||
struct domain *d = curr->domain;
|
||||
struct domain *pg_owner;
|
||||
+ int okay, rc = put_old_guest_table(curr);
|
||||
+
|
||||
+ if ( unlikely(rc) )
|
||||
+ {
|
||||
+ if ( likely(rc == -EAGAIN) )
|
||||
+ rc = hypercall_create_continuation(
|
||||
+ __HYPERVISOR_mmuext_op, "hihi", uops, count, pdone,
|
||||
+ foreigndom);
|
||||
+ return rc;
|
||||
+ }
|
||||
|
||||
if ( unlikely(count & MMU_UPDATE_PREEMPTED) )
|
||||
{
|
||||
--- a/xen/arch/x86/x86_64/compat/mm.c
|
||||
+++ b/xen/arch/x86/x86_64/compat/mm.c
|
||||
@@ -365,7 +365,7 @@ int compat_mmuext_op(XEN_GUEST_HANDLE(mm
|
||||
: mcs->call.args[1];
|
||||
unsigned int left = arg1 & ~MMU_UPDATE_PREEMPTED;
|
||||
|
||||
- BUG_ON(left == arg1);
|
||||
+ BUG_ON(left == arg1 && left != i);
|
||||
BUG_ON(left > count);
|
||||
guest_handle_add_offset(nat_ops, i - left);
|
||||
guest_handle_subtract_offset(cmp_uops, left);
|
||||
--- a/xen/include/asm-x86/domain.h
|
||||
+++ b/xen/include/asm-x86/domain.h
|
||||
@@ -464,6 +464,7 @@ struct arch_vcpu
|
||||
pagetable_t guest_table_user; /* (MFN) x86/64 user-space pagetable */
|
||||
#endif
|
||||
pagetable_t guest_table; /* (MFN) guest notion of cr3 */
|
||||
+ struct page_info *old_guest_table; /* partially destructed pagetable */
|
||||
/* guest_table holds a ref to the page, and also a type-count unless
|
||||
* shadow refcounts are in use */
|
||||
pagetable_t shadow_table[4]; /* (MFN) shadow(s) of guest */
|
||||
--- a/xen/include/asm-x86/mm.h
|
||||
+++ b/xen/include/asm-x86/mm.h
|
||||
@@ -605,6 +605,7 @@ void audit_domains(void);
|
||||
int new_guest_cr3(unsigned long pfn);
|
||||
void make_cr3(struct vcpu *v, unsigned long mfn);
|
||||
void update_cr3(struct vcpu *v);
|
||||
+int vcpu_destroy_pagetables(struct vcpu *, bool_t preemptible);
|
||||
void propagate_page_fault(unsigned long addr, u16 error_code);
|
||||
void *do_page_walk(struct vcpu *v, unsigned long addr);
|
||||
|
|
@ -1,169 +0,0 @@
|
|||
x86: make new_guest_cr3() preemptible
|
||||
|
||||
... as it may take significant amounts of time.
|
||||
|
||||
This is part of CVE-2013-1918 / XSA-45.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Acked-by: Tim Deegan <tim@xen.org>
|
||||
|
||||
--- a/xen/arch/x86/mm.c
|
||||
+++ b/xen/arch/x86/mm.c
|
||||
@@ -2889,44 +2889,69 @@ int new_guest_cr3(unsigned long mfn)
|
||||
{
|
||||
struct vcpu *curr = current;
|
||||
struct domain *d = curr->domain;
|
||||
- int okay;
|
||||
+ int rc;
|
||||
unsigned long old_base_mfn;
|
||||
|
||||
#ifdef __x86_64__
|
||||
if ( is_pv_32on64_domain(d) )
|
||||
{
|
||||
- okay = paging_mode_refcounts(d)
|
||||
- ? 0 /* Old code was broken, but what should it be? */
|
||||
- : mod_l4_entry(
|
||||
+ rc = paging_mode_refcounts(d)
|
||||
+ ? -EINVAL /* Old code was broken, but what should it be? */
|
||||
+ : mod_l4_entry(
|
||||
__va(pagetable_get_paddr(curr->arch.guest_table)),
|
||||
l4e_from_pfn(
|
||||
mfn,
|
||||
(_PAGE_PRESENT|_PAGE_RW|_PAGE_USER|_PAGE_ACCESSED)),
|
||||
- pagetable_get_pfn(curr->arch.guest_table), 0, 0, curr) == 0;
|
||||
- if ( unlikely(!okay) )
|
||||
+ pagetable_get_pfn(curr->arch.guest_table), 0, 1, curr);
|
||||
+ switch ( rc )
|
||||
{
|
||||
+ case 0:
|
||||
+ break;
|
||||
+ case -EINTR:
|
||||
+ case -EAGAIN:
|
||||
+ return -EAGAIN;
|
||||
+ default:
|
||||
MEM_LOG("Error while installing new compat baseptr %lx", mfn);
|
||||
- return 0;
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
invalidate_shadow_ldt(curr, 0);
|
||||
write_ptbase(curr);
|
||||
|
||||
- return 1;
|
||||
+ return 0;
|
||||
}
|
||||
#endif
|
||||
- okay = paging_mode_refcounts(d)
|
||||
- ? get_page_from_pagenr(mfn, d)
|
||||
- : !get_page_and_type_from_pagenr(mfn, PGT_root_page_table, d, 0, 0);
|
||||
- if ( unlikely(!okay) )
|
||||
+ rc = put_old_guest_table(curr);
|
||||
+ if ( unlikely(rc) )
|
||||
+ return rc;
|
||||
+
|
||||
+ old_base_mfn = pagetable_get_pfn(curr->arch.guest_table);
|
||||
+ /*
|
||||
+ * This is particularly important when getting restarted after the
|
||||
+ * previous attempt got preempted in the put-old-MFN phase.
|
||||
+ */
|
||||
+ if ( old_base_mfn == mfn )
|
||||
{
|
||||
- MEM_LOG("Error while installing new baseptr %lx", mfn);
|
||||
+ write_ptbase(curr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
- invalidate_shadow_ldt(curr, 0);
|
||||
+ rc = paging_mode_refcounts(d)
|
||||
+ ? (get_page_from_pagenr(mfn, d) ? 0 : -EINVAL)
|
||||
+ : get_page_and_type_from_pagenr(mfn, PGT_root_page_table, d, 0, 1);
|
||||
+ switch ( rc )
|
||||
+ {
|
||||
+ case 0:
|
||||
+ break;
|
||||
+ case -EINTR:
|
||||
+ case -EAGAIN:
|
||||
+ return -EAGAIN;
|
||||
+ default:
|
||||
+ MEM_LOG("Error while installing new baseptr %lx", mfn);
|
||||
+ return rc;
|
||||
+ }
|
||||
|
||||
- old_base_mfn = pagetable_get_pfn(curr->arch.guest_table);
|
||||
+ invalidate_shadow_ldt(curr, 0);
|
||||
|
||||
curr->arch.guest_table = pagetable_from_pfn(mfn);
|
||||
update_cr3(curr);
|
||||
@@ -2935,13 +2960,25 @@ int new_guest_cr3(unsigned long mfn)
|
||||
|
||||
if ( likely(old_base_mfn != 0) )
|
||||
{
|
||||
+ struct page_info *page = mfn_to_page(old_base_mfn);
|
||||
+
|
||||
if ( paging_mode_refcounts(d) )
|
||||
- put_page(mfn_to_page(old_base_mfn));
|
||||
+ put_page(page);
|
||||
else
|
||||
- put_page_and_type(mfn_to_page(old_base_mfn));
|
||||
+ switch ( rc = put_page_and_type_preemptible(page, 1) )
|
||||
+ {
|
||||
+ case -EINTR:
|
||||
+ rc = -EAGAIN;
|
||||
+ case -EAGAIN:
|
||||
+ curr->arch.old_guest_table = page;
|
||||
+ break;
|
||||
+ default:
|
||||
+ BUG_ON(rc);
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
|
||||
- return 1;
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
static struct domain *get_pg_owner(domid_t domid)
|
||||
@@ -3239,8 +3276,13 @@ long do_mmuext_op(
|
||||
}
|
||||
|
||||
case MMUEXT_NEW_BASEPTR:
|
||||
- okay = (!paging_mode_translate(d)
|
||||
- && new_guest_cr3(op.arg1.mfn));
|
||||
+ if ( paging_mode_translate(d) )
|
||||
+ okay = 0;
|
||||
+ else
|
||||
+ {
|
||||
+ rc = new_guest_cr3(op.arg1.mfn);
|
||||
+ okay = !rc;
|
||||
+ }
|
||||
break;
|
||||
|
||||
|
||||
--- a/xen/arch/x86/traps.c
|
||||
+++ b/xen/arch/x86/traps.c
|
||||
@@ -2407,12 +2407,23 @@ static int emulate_privileged_op(struct
|
||||
#endif
|
||||
}
|
||||
page = get_page_from_gfn(v->domain, gfn, NULL, P2M_ALLOC);
|
||||
- rc = page ? new_guest_cr3(page_to_mfn(page)) : 0;
|
||||
if ( page )
|
||||
+ {
|
||||
+ rc = new_guest_cr3(page_to_mfn(page));
|
||||
put_page(page);
|
||||
+ }
|
||||
+ else
|
||||
+ rc = -EINVAL;
|
||||
domain_unlock(v->domain);
|
||||
- if ( rc == 0 ) /* not okay */
|
||||
+ switch ( rc )
|
||||
+ {
|
||||
+ case 0:
|
||||
+ break;
|
||||
+ case -EAGAIN: /* retry after preemption */
|
||||
+ goto skip;
|
||||
+ default: /* not okay */
|
||||
goto fail;
|
||||
+ }
|
||||
break;
|
||||
}
|
||||
|
|
@ -1,74 +0,0 @@
|
|||
x86: make MMUEXT_NEW_USER_BASEPTR preemptible
|
||||
|
||||
... as it may take significant amounts of time.
|
||||
|
||||
This is part of CVE-2013-1918 / XSA-45.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Acked-by: Tim Deegan <tim@xen.org>
|
||||
|
||||
--- a/xen/arch/x86/mm.c
|
||||
+++ b/xen/arch/x86/mm.c
|
||||
@@ -3296,29 +3296,56 @@ long do_mmuext_op(
|
||||
break;
|
||||
}
|
||||
|
||||
+ old_mfn = pagetable_get_pfn(curr->arch.guest_table_user);
|
||||
+ /*
|
||||
+ * This is particularly important when getting restarted after the
|
||||
+ * previous attempt got preempted in the put-old-MFN phase.
|
||||
+ */
|
||||
+ if ( old_mfn == op.arg1.mfn )
|
||||
+ break;
|
||||
+
|
||||
if ( op.arg1.mfn != 0 )
|
||||
{
|
||||
if ( paging_mode_refcounts(d) )
|
||||
okay = get_page_from_pagenr(op.arg1.mfn, d);
|
||||
else
|
||||
- okay = !get_page_and_type_from_pagenr(
|
||||
- op.arg1.mfn, PGT_root_page_table, d, 0, 0);
|
||||
+ {
|
||||
+ rc = get_page_and_type_from_pagenr(
|
||||
+ op.arg1.mfn, PGT_root_page_table, d, 0, 1);
|
||||
+ okay = !rc;
|
||||
+ }
|
||||
if ( unlikely(!okay) )
|
||||
{
|
||||
- MEM_LOG("Error while installing new mfn %lx", op.arg1.mfn);
|
||||
+ if ( rc == -EINTR )
|
||||
+ rc = -EAGAIN;
|
||||
+ else if ( rc != -EAGAIN )
|
||||
+ MEM_LOG("Error while installing new mfn %lx",
|
||||
+ op.arg1.mfn);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
- old_mfn = pagetable_get_pfn(curr->arch.guest_table_user);
|
||||
curr->arch.guest_table_user = pagetable_from_pfn(op.arg1.mfn);
|
||||
|
||||
if ( old_mfn != 0 )
|
||||
{
|
||||
+ struct page_info *page = mfn_to_page(old_mfn);
|
||||
+
|
||||
if ( paging_mode_refcounts(d) )
|
||||
- put_page(mfn_to_page(old_mfn));
|
||||
+ put_page(page);
|
||||
else
|
||||
- put_page_and_type(mfn_to_page(old_mfn));
|
||||
+ switch ( rc = put_page_and_type_preemptible(page, 1) )
|
||||
+ {
|
||||
+ case -EINTR:
|
||||
+ rc = -EAGAIN;
|
||||
+ case -EAGAIN:
|
||||
+ curr->arch.old_guest_table = page;
|
||||
+ okay = 0;
|
||||
+ break;
|
||||
+ default:
|
||||
+ BUG_ON(rc);
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
|
||||
break;
|
|
@ -1,200 +0,0 @@
|
|||
x86: make vcpu_reset() preemptible
|
||||
|
||||
... as dropping the old page tables may take significant amounts of
|
||||
time.
|
||||
|
||||
This is part of CVE-2013-1918 / XSA-45.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Acked-by: Tim Deegan <tim@xen.org>
|
||||
|
||||
--- a/xen/arch/x86/domain.c
|
||||
+++ b/xen/arch/x86/domain.c
|
||||
@@ -1051,17 +1051,16 @@ int arch_set_info_guest(
|
||||
#undef c
|
||||
}
|
||||
|
||||
-void arch_vcpu_reset(struct vcpu *v)
|
||||
+int arch_vcpu_reset(struct vcpu *v)
|
||||
{
|
||||
if ( !is_hvm_vcpu(v) )
|
||||
{
|
||||
destroy_gdt(v);
|
||||
- vcpu_destroy_pagetables(v, 0);
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- vcpu_end_shutdown_deferral(v);
|
||||
+ return vcpu_destroy_pagetables(v);
|
||||
}
|
||||
+
|
||||
+ vcpu_end_shutdown_deferral(v);
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2085,7 +2084,7 @@ int domain_relinquish_resources(struct d
|
||||
/* Drop the in-use references to page-table bases. */
|
||||
for_each_vcpu ( d, v )
|
||||
{
|
||||
- ret = vcpu_destroy_pagetables(v, 1);
|
||||
+ ret = vcpu_destroy_pagetables(v);
|
||||
if ( ret )
|
||||
return ret;
|
||||
}
|
||||
--- a/xen/arch/x86/hvm/hvm.c
|
||||
+++ b/xen/arch/x86/hvm/hvm.c
|
||||
@@ -3509,8 +3509,11 @@ static void hvm_s3_suspend(struct domain
|
||||
|
||||
for_each_vcpu ( d, v )
|
||||
{
|
||||
+ int rc;
|
||||
+
|
||||
vlapic_reset(vcpu_vlapic(v));
|
||||
- vcpu_reset(v);
|
||||
+ rc = vcpu_reset(v);
|
||||
+ ASSERT(!rc);
|
||||
}
|
||||
|
||||
vpic_reset(d);
|
||||
--- a/xen/arch/x86/hvm/vlapic.c
|
||||
+++ b/xen/arch/x86/hvm/vlapic.c
|
||||
@@ -252,10 +252,13 @@ static void vlapic_init_sipi_action(unsi
|
||||
{
|
||||
case APIC_DM_INIT: {
|
||||
bool_t fpu_initialised;
|
||||
+ int rc;
|
||||
+
|
||||
domain_lock(target->domain);
|
||||
/* Reset necessary VCPU state. This does not include FPU state. */
|
||||
fpu_initialised = target->fpu_initialised;
|
||||
- vcpu_reset(target);
|
||||
+ rc = vcpu_reset(target);
|
||||
+ ASSERT(!rc);
|
||||
target->fpu_initialised = fpu_initialised;
|
||||
vlapic_reset(vcpu_vlapic(target));
|
||||
domain_unlock(target->domain);
|
||||
--- a/xen/arch/x86/mm.c
|
||||
+++ b/xen/arch/x86/mm.c
|
||||
@@ -2827,7 +2827,7 @@ static int put_old_guest_table(struct vc
|
||||
return rc;
|
||||
}
|
||||
|
||||
-int vcpu_destroy_pagetables(struct vcpu *v, bool_t preemptible)
|
||||
+int vcpu_destroy_pagetables(struct vcpu *v)
|
||||
{
|
||||
unsigned long mfn = pagetable_get_pfn(v->arch.guest_table);
|
||||
struct page_info *page;
|
||||
@@ -2847,7 +2847,7 @@ int vcpu_destroy_pagetables(struct vcpu
|
||||
if ( paging_mode_refcounts(v->domain) )
|
||||
put_page(page);
|
||||
else
|
||||
- rc = put_page_and_type_preemptible(page, preemptible);
|
||||
+ rc = put_page_and_type_preemptible(page, 1);
|
||||
}
|
||||
|
||||
#ifdef __x86_64__
|
||||
@@ -2873,7 +2873,7 @@ int vcpu_destroy_pagetables(struct vcpu
|
||||
if ( paging_mode_refcounts(v->domain) )
|
||||
put_page(page);
|
||||
else
|
||||
- rc = put_page_and_type_preemptible(page, preemptible);
|
||||
+ rc = put_page_and_type_preemptible(page, 1);
|
||||
}
|
||||
if ( !rc )
|
||||
v->arch.guest_table_user = pagetable_null();
|
||||
--- a/xen/common/domain.c
|
||||
+++ b/xen/common/domain.c
|
||||
@@ -779,14 +779,18 @@ void domain_unpause_by_systemcontroller(
|
||||
domain_unpause(d);
|
||||
}
|
||||
|
||||
-void vcpu_reset(struct vcpu *v)
|
||||
+int vcpu_reset(struct vcpu *v)
|
||||
{
|
||||
struct domain *d = v->domain;
|
||||
+ int rc;
|
||||
|
||||
vcpu_pause(v);
|
||||
domain_lock(d);
|
||||
|
||||
- arch_vcpu_reset(v);
|
||||
+ set_bit(_VPF_in_reset, &v->pause_flags);
|
||||
+ rc = arch_vcpu_reset(v);
|
||||
+ if ( rc )
|
||||
+ goto out_unlock;
|
||||
|
||||
set_bit(_VPF_down, &v->pause_flags);
|
||||
|
||||
@@ -802,9 +806,13 @@ void vcpu_reset(struct vcpu *v)
|
||||
#endif
|
||||
cpumask_clear(v->cpu_affinity_tmp);
|
||||
clear_bit(_VPF_blocked, &v->pause_flags);
|
||||
+ clear_bit(_VPF_in_reset, &v->pause_flags);
|
||||
|
||||
+ out_unlock:
|
||||
domain_unlock(v->domain);
|
||||
vcpu_unpause(v);
|
||||
+
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
|
||||
--- a/xen/common/domctl.c
|
||||
+++ b/xen/common/domctl.c
|
||||
@@ -306,8 +306,10 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
|
||||
|
||||
if ( guest_handle_is_null(op->u.vcpucontext.ctxt) )
|
||||
{
|
||||
- vcpu_reset(v);
|
||||
- ret = 0;
|
||||
+ ret = vcpu_reset(v);
|
||||
+ if ( ret == -EAGAIN )
|
||||
+ ret = hypercall_create_continuation(
|
||||
+ __HYPERVISOR_domctl, "h", u_domctl);
|
||||
goto svc_out;
|
||||
}
|
||||
|
||||
--- a/xen/include/asm-x86/mm.h
|
||||
+++ b/xen/include/asm-x86/mm.h
|
||||
@@ -605,7 +605,7 @@ void audit_domains(void);
|
||||
int new_guest_cr3(unsigned long pfn);
|
||||
void make_cr3(struct vcpu *v, unsigned long mfn);
|
||||
void update_cr3(struct vcpu *v);
|
||||
-int vcpu_destroy_pagetables(struct vcpu *, bool_t preemptible);
|
||||
+int vcpu_destroy_pagetables(struct vcpu *);
|
||||
void propagate_page_fault(unsigned long addr, u16 error_code);
|
||||
void *do_page_walk(struct vcpu *v, unsigned long addr);
|
||||
|
||||
--- a/xen/include/xen/domain.h
|
||||
+++ b/xen/include/xen/domain.h
|
||||
@@ -13,7 +13,7 @@ typedef union {
|
||||
struct vcpu *alloc_vcpu(
|
||||
struct domain *d, unsigned int vcpu_id, unsigned int cpu_id);
|
||||
struct vcpu *alloc_dom0_vcpu0(void);
|
||||
-void vcpu_reset(struct vcpu *v);
|
||||
+int vcpu_reset(struct vcpu *);
|
||||
|
||||
struct xen_domctl_getdomaininfo;
|
||||
void getdomaininfo(struct domain *d, struct xen_domctl_getdomaininfo *info);
|
||||
@@ -67,7 +67,7 @@ void arch_dump_vcpu_info(struct vcpu *v)
|
||||
|
||||
void arch_dump_domain_info(struct domain *d);
|
||||
|
||||
-void arch_vcpu_reset(struct vcpu *v);
|
||||
+int arch_vcpu_reset(struct vcpu *);
|
||||
|
||||
extern spinlock_t vcpu_alloc_lock;
|
||||
bool_t domctl_lock_acquire(void);
|
||||
--- a/xen/include/xen/sched.h
|
||||
+++ b/xen/include/xen/sched.h
|
||||
@@ -644,6 +644,9 @@ static inline struct domain *next_domain
|
||||
/* VCPU is blocked due to missing mem_sharing ring. */
|
||||
#define _VPF_mem_sharing 6
|
||||
#define VPF_mem_sharing (1UL<<_VPF_mem_sharing)
|
||||
+ /* VCPU is being reset. */
|
||||
+#define _VPF_in_reset 7
|
||||
+#define VPF_in_reset (1UL<<_VPF_in_reset)
|
||||
|
||||
static inline int vcpu_runnable(struct vcpu *v)
|
||||
{
|
|
@ -1,204 +0,0 @@
|
|||
x86: make arch_set_info_guest() preemptible
|
||||
|
||||
.. as the root page table validation (and the dropping of an eventual
|
||||
old one) can require meaningful amounts of time.
|
||||
|
||||
This is part of CVE-2013-1918 / XSA-45.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Acked-by: Tim Deegan <tim@xen.org>
|
||||
|
||||
--- a/xen/arch/x86/domain.c
|
||||
+++ b/xen/arch/x86/domain.c
|
||||
@@ -858,6 +858,9 @@ int arch_set_info_guest(
|
||||
|
||||
if ( !v->is_initialised )
|
||||
{
|
||||
+ if ( !compat && !(flags & VGCF_in_kernel) && !c.nat->ctrlreg[1] )
|
||||
+ return -EINVAL;
|
||||
+
|
||||
v->arch.pv_vcpu.ldt_base = c(ldt_base);
|
||||
v->arch.pv_vcpu.ldt_ents = c(ldt_ents);
|
||||
}
|
||||
@@ -955,24 +958,44 @@ int arch_set_info_guest(
|
||||
if ( rc != 0 )
|
||||
return rc;
|
||||
|
||||
+ set_bit(_VPF_in_reset, &v->pause_flags);
|
||||
+
|
||||
if ( !compat )
|
||||
- {
|
||||
cr3_gfn = xen_cr3_to_pfn(c.nat->ctrlreg[3]);
|
||||
- cr3_page = get_page_from_gfn(d, cr3_gfn, NULL, P2M_ALLOC);
|
||||
-
|
||||
- if ( !cr3_page )
|
||||
- {
|
||||
- destroy_gdt(v);
|
||||
- return -EINVAL;
|
||||
- }
|
||||
- if ( !paging_mode_refcounts(d)
|
||||
- && !get_page_type(cr3_page, PGT_base_page_table) )
|
||||
- {
|
||||
- put_page(cr3_page);
|
||||
- destroy_gdt(v);
|
||||
- return -EINVAL;
|
||||
- }
|
||||
+#ifdef CONFIG_COMPAT
|
||||
+ else
|
||||
+ cr3_gfn = compat_cr3_to_pfn(c.cmp->ctrlreg[3]);
|
||||
+#endif
|
||||
+ cr3_page = get_page_from_gfn(d, cr3_gfn, NULL, P2M_ALLOC);
|
||||
|
||||
+ if ( !cr3_page )
|
||||
+ rc = -EINVAL;
|
||||
+ else if ( paging_mode_refcounts(d) )
|
||||
+ /* nothing */;
|
||||
+ else if ( cr3_page == v->arch.old_guest_table )
|
||||
+ {
|
||||
+ v->arch.old_guest_table = NULL;
|
||||
+ put_page(cr3_page);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ /*
|
||||
+ * Since v->arch.guest_table{,_user} are both NULL, this effectively
|
||||
+ * is just a call to put_old_guest_table().
|
||||
+ */
|
||||
+ if ( !compat )
|
||||
+ rc = vcpu_destroy_pagetables(v);
|
||||
+ if ( !rc )
|
||||
+ rc = get_page_type_preemptible(cr3_page,
|
||||
+ !compat ? PGT_root_page_table
|
||||
+ : PGT_l3_page_table);
|
||||
+ if ( rc == -EINTR )
|
||||
+ rc = -EAGAIN;
|
||||
+ }
|
||||
+ if ( rc )
|
||||
+ /* handled below */;
|
||||
+ else if ( !compat )
|
||||
+ {
|
||||
v->arch.guest_table = pagetable_from_page(cr3_page);
|
||||
#ifdef __x86_64__
|
||||
if ( c.nat->ctrlreg[1] )
|
||||
@@ -980,56 +1003,44 @@ int arch_set_info_guest(
|
||||
cr3_gfn = xen_cr3_to_pfn(c.nat->ctrlreg[1]);
|
||||
cr3_page = get_page_from_gfn(d, cr3_gfn, NULL, P2M_ALLOC);
|
||||
|
||||
- if ( !cr3_page ||
|
||||
- (!paging_mode_refcounts(d)
|
||||
- && !get_page_type(cr3_page, PGT_base_page_table)) )
|
||||
+ if ( !cr3_page )
|
||||
+ rc = -EINVAL;
|
||||
+ else if ( !paging_mode_refcounts(d) )
|
||||
{
|
||||
- if (cr3_page)
|
||||
- put_page(cr3_page);
|
||||
- cr3_page = pagetable_get_page(v->arch.guest_table);
|
||||
- v->arch.guest_table = pagetable_null();
|
||||
- if ( paging_mode_refcounts(d) )
|
||||
- put_page(cr3_page);
|
||||
- else
|
||||
- put_page_and_type(cr3_page);
|
||||
- destroy_gdt(v);
|
||||
- return -EINVAL;
|
||||
+ rc = get_page_type_preemptible(cr3_page, PGT_root_page_table);
|
||||
+ switch ( rc )
|
||||
+ {
|
||||
+ case -EINTR:
|
||||
+ rc = -EAGAIN;
|
||||
+ case -EAGAIN:
|
||||
+ v->arch.old_guest_table =
|
||||
+ pagetable_get_page(v->arch.guest_table);
|
||||
+ v->arch.guest_table = pagetable_null();
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
-
|
||||
- v->arch.guest_table_user = pagetable_from_page(cr3_page);
|
||||
- }
|
||||
- else if ( !(flags & VGCF_in_kernel) )
|
||||
- {
|
||||
- destroy_gdt(v);
|
||||
- return -EINVAL;
|
||||
+ if ( !rc )
|
||||
+ v->arch.guest_table_user = pagetable_from_page(cr3_page);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
l4_pgentry_t *l4tab;
|
||||
|
||||
- cr3_gfn = compat_cr3_to_pfn(c.cmp->ctrlreg[3]);
|
||||
- cr3_page = get_page_from_gfn(d, cr3_gfn, NULL, P2M_ALLOC);
|
||||
-
|
||||
- if ( !cr3_page)
|
||||
- {
|
||||
- destroy_gdt(v);
|
||||
- return -EINVAL;
|
||||
- }
|
||||
-
|
||||
- if (!paging_mode_refcounts(d)
|
||||
- && !get_page_type(cr3_page, PGT_l3_page_table) )
|
||||
- {
|
||||
- put_page(cr3_page);
|
||||
- destroy_gdt(v);
|
||||
- return -EINVAL;
|
||||
- }
|
||||
-
|
||||
l4tab = __va(pagetable_get_paddr(v->arch.guest_table));
|
||||
*l4tab = l4e_from_pfn(page_to_mfn(cr3_page),
|
||||
_PAGE_PRESENT|_PAGE_RW|_PAGE_USER|_PAGE_ACCESSED);
|
||||
#endif
|
||||
}
|
||||
+ if ( rc )
|
||||
+ {
|
||||
+ if ( cr3_page )
|
||||
+ put_page(cr3_page);
|
||||
+ destroy_gdt(v);
|
||||
+ return rc;
|
||||
+ }
|
||||
+
|
||||
+ clear_bit(_VPF_in_reset, &v->pause_flags);
|
||||
|
||||
if ( v->vcpu_id == 0 )
|
||||
update_domain_wallclock_time(d);
|
||||
--- a/xen/common/compat/domain.c
|
||||
+++ b/xen/common/compat/domain.c
|
||||
@@ -50,6 +50,10 @@ int compat_vcpu_op(int cmd, int vcpuid,
|
||||
rc = v->is_initialised ? -EEXIST : arch_set_info_guest(v, cmp_ctxt);
|
||||
domain_unlock(d);
|
||||
|
||||
+ if ( rc == -EAGAIN )
|
||||
+ rc = hypercall_create_continuation(__HYPERVISOR_vcpu_op, "iih",
|
||||
+ cmd, vcpuid, arg);
|
||||
+
|
||||
xfree(cmp_ctxt);
|
||||
break;
|
||||
}
|
||||
--- a/xen/common/domain.c
|
||||
+++ b/xen/common/domain.c
|
||||
@@ -849,6 +849,11 @@ long do_vcpu_op(int cmd, int vcpuid, XEN
|
||||
domain_unlock(d);
|
||||
|
||||
free_vcpu_guest_context(ctxt);
|
||||
+
|
||||
+ if ( rc == -EAGAIN )
|
||||
+ rc = hypercall_create_continuation(__HYPERVISOR_vcpu_op, "iih",
|
||||
+ cmd, vcpuid, arg);
|
||||
+
|
||||
break;
|
||||
|
||||
case VCPUOP_up: {
|
||||
--- a/xen/common/domctl.c
|
||||
+++ b/xen/common/domctl.c
|
||||
@@ -338,6 +338,10 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc
|
||||
domain_pause(d);
|
||||
ret = arch_set_info_guest(v, c);
|
||||
domain_unpause(d);
|
||||
+
|
||||
+ if ( ret == -EAGAIN )
|
||||
+ ret = hypercall_create_continuation(
|
||||
+ __HYPERVISOR_domctl, "h", u_domctl);
|
||||
}
|
||||
|
||||
svc_out:
|
|
@ -1,127 +0,0 @@
|
|||
x86: make page table unpinning preemptible
|
||||
|
||||
... as it may take significant amounts of time.
|
||||
|
||||
Since we can't re-invoke the operation in a second attempt, the
|
||||
continuation logic must be slightly tweaked so that we make sure
|
||||
do_mmuext_op() gets run one more time even when the preempted unpin
|
||||
operation was the last one in a batch.
|
||||
|
||||
This is part of CVE-2013-1918 / XSA-45.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Acked-by: Tim Deegan <tim@xen.org>
|
||||
|
||||
--- a/xen/arch/x86/mm.c
|
||||
+++ b/xen/arch/x86/mm.c
|
||||
@@ -3123,6 +3123,14 @@ long do_mmuext_op(
|
||||
return rc;
|
||||
}
|
||||
|
||||
+ if ( unlikely(count == MMU_UPDATE_PREEMPTED) &&
|
||||
+ likely(guest_handle_is_null(uops)) )
|
||||
+ {
|
||||
+ /* See the curr->arch.old_guest_table related
|
||||
+ * hypercall_create_continuation() below. */
|
||||
+ return (int)foreigndom;
|
||||
+ }
|
||||
+
|
||||
if ( unlikely(count & MMU_UPDATE_PREEMPTED) )
|
||||
{
|
||||
count &= ~MMU_UPDATE_PREEMPTED;
|
||||
@@ -3146,7 +3154,7 @@ long do_mmuext_op(
|
||||
|
||||
for ( i = 0; i < count; i++ )
|
||||
{
|
||||
- if ( hypercall_preempt_check() )
|
||||
+ if ( curr->arch.old_guest_table || hypercall_preempt_check() )
|
||||
{
|
||||
rc = -EAGAIN;
|
||||
break;
|
||||
@@ -3266,7 +3274,17 @@ long do_mmuext_op(
|
||||
break;
|
||||
}
|
||||
|
||||
- put_page_and_type(page);
|
||||
+ switch ( rc = put_page_and_type_preemptible(page, 1) )
|
||||
+ {
|
||||
+ case -EINTR:
|
||||
+ case -EAGAIN:
|
||||
+ curr->arch.old_guest_table = page;
|
||||
+ rc = 0;
|
||||
+ break;
|
||||
+ default:
|
||||
+ BUG_ON(rc);
|
||||
+ break;
|
||||
+ }
|
||||
put_page(page);
|
||||
|
||||
/* A page is dirtied when its pin status is cleared. */
|
||||
@@ -3587,9 +3605,27 @@ long do_mmuext_op(
|
||||
}
|
||||
|
||||
if ( rc == -EAGAIN )
|
||||
+ {
|
||||
+ ASSERT(i < count);
|
||||
rc = hypercall_create_continuation(
|
||||
__HYPERVISOR_mmuext_op, "hihi",
|
||||
uops, (count - i) | MMU_UPDATE_PREEMPTED, pdone, foreigndom);
|
||||
+ }
|
||||
+ else if ( curr->arch.old_guest_table )
|
||||
+ {
|
||||
+ XEN_GUEST_HANDLE(void) null;
|
||||
+
|
||||
+ ASSERT(rc || i == count);
|
||||
+ set_xen_guest_handle(null, NULL);
|
||||
+ /*
|
||||
+ * In order to have a way to communicate the final return value to
|
||||
+ * our continuation, we pass this in place of "foreigndom", building
|
||||
+ * on the fact that this argument isn't needed anymore.
|
||||
+ */
|
||||
+ rc = hypercall_create_continuation(
|
||||
+ __HYPERVISOR_mmuext_op, "hihi", null,
|
||||
+ MMU_UPDATE_PREEMPTED, null, rc);
|
||||
+ }
|
||||
|
||||
put_pg_owner(pg_owner);
|
||||
|
||||
--- a/xen/arch/x86/x86_64/compat/mm.c
|
||||
+++ b/xen/arch/x86/x86_64/compat/mm.c
|
||||
@@ -268,6 +268,13 @@ int compat_mmuext_op(XEN_GUEST_HANDLE(mm
|
||||
int rc = 0;
|
||||
XEN_GUEST_HANDLE(mmuext_op_t) nat_ops;
|
||||
|
||||
+ if ( unlikely(count == MMU_UPDATE_PREEMPTED) &&
|
||||
+ likely(guest_handle_is_null(cmp_uops)) )
|
||||
+ {
|
||||
+ set_xen_guest_handle(nat_ops, NULL);
|
||||
+ return do_mmuext_op(nat_ops, count, pdone, foreigndom);
|
||||
+ }
|
||||
+
|
||||
preempt_mask = count & MMU_UPDATE_PREEMPTED;
|
||||
count ^= preempt_mask;
|
||||
|
||||
@@ -370,12 +377,18 @@ int compat_mmuext_op(XEN_GUEST_HANDLE(mm
|
||||
guest_handle_add_offset(nat_ops, i - left);
|
||||
guest_handle_subtract_offset(cmp_uops, left);
|
||||
left = 1;
|
||||
- BUG_ON(!hypercall_xlat_continuation(&left, 0x01, nat_ops, cmp_uops));
|
||||
- BUG_ON(left != arg1);
|
||||
- if (!test_bit(_MCSF_in_multicall, &mcs->flags))
|
||||
- regs->_ecx += count - i;
|
||||
+ if ( arg1 != MMU_UPDATE_PREEMPTED )
|
||||
+ {
|
||||
+ BUG_ON(!hypercall_xlat_continuation(&left, 0x01, nat_ops,
|
||||
+ cmp_uops));
|
||||
+ if ( !test_bit(_MCSF_in_multicall, &mcs->flags) )
|
||||
+ regs->_ecx += count - i;
|
||||
+ else
|
||||
+ mcs->compat_call.args[1] += count - i;
|
||||
+ }
|
||||
else
|
||||
- mcs->compat_call.args[1] += count - i;
|
||||
+ BUG_ON(hypercall_xlat_continuation(&left, 0));
|
||||
+ BUG_ON(left != arg1);
|
||||
}
|
||||
else
|
||||
BUG_ON(err > 0);
|
|
@ -1,255 +0,0 @@
|
|||
x86: make page table handling error paths preemptible
|
||||
|
||||
... as they may take significant amounts of time.
|
||||
|
||||
This requires cloning the tweaked continuation logic from
|
||||
do_mmuext_op() to do_mmu_update().
|
||||
|
||||
Note that in mod_l[34]_entry() a negative "preemptible" value gets
|
||||
passed to put_page_from_l[34]e() now, telling the callee to store the
|
||||
respective page in current->arch.old_guest_table (for a hypercall
|
||||
continuation to pick up), rather than carrying out the put right away.
|
||||
This is going to be made a little more explicit by a subsequent cleanup
|
||||
patch.
|
||||
|
||||
This is part of CVE-2013-1918 / XSA-45.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Acked-by: Tim Deegan <tim@xen.org>
|
||||
|
||||
--- a/xen/arch/x86/mm.c
|
||||
+++ b/xen/arch/x86/mm.c
|
||||
@@ -1241,7 +1241,16 @@ static int put_page_from_l3e(l3_pgentry_
|
||||
#endif
|
||||
|
||||
if ( unlikely(partial > 0) )
|
||||
+ {
|
||||
+ ASSERT(preemptible >= 0);
|
||||
return __put_page_type(l3e_get_page(l3e), preemptible);
|
||||
+ }
|
||||
+
|
||||
+ if ( preemptible < 0 )
|
||||
+ {
|
||||
+ current->arch.old_guest_table = l3e_get_page(l3e);
|
||||
+ return 0;
|
||||
+ }
|
||||
|
||||
return put_page_and_type_preemptible(l3e_get_page(l3e), preemptible);
|
||||
}
|
||||
@@ -1254,7 +1263,17 @@ static int put_page_from_l4e(l4_pgentry_
|
||||
(l4e_get_pfn(l4e) != pfn) )
|
||||
{
|
||||
if ( unlikely(partial > 0) )
|
||||
+ {
|
||||
+ ASSERT(preemptible >= 0);
|
||||
return __put_page_type(l4e_get_page(l4e), preemptible);
|
||||
+ }
|
||||
+
|
||||
+ if ( preemptible < 0 )
|
||||
+ {
|
||||
+ current->arch.old_guest_table = l4e_get_page(l4e);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
return put_page_and_type_preemptible(l4e_get_page(l4e), preemptible);
|
||||
}
|
||||
return 1;
|
||||
@@ -1549,12 +1568,17 @@ static int alloc_l3_table(struct page_in
|
||||
if ( rc < 0 && rc != -EAGAIN && rc != -EINTR )
|
||||
{
|
||||
MEM_LOG("Failure in alloc_l3_table: entry %d", i);
|
||||
+ if ( i )
|
||||
+ {
|
||||
+ page->nr_validated_ptes = i;
|
||||
+ page->partial_pte = 0;
|
||||
+ current->arch.old_guest_table = page;
|
||||
+ }
|
||||
while ( i-- > 0 )
|
||||
{
|
||||
if ( !is_guest_l3_slot(i) )
|
||||
continue;
|
||||
unadjust_guest_l3e(pl3e[i], d);
|
||||
- put_page_from_l3e(pl3e[i], pfn, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1584,22 +1608,24 @@ static int alloc_l4_table(struct page_in
|
||||
page->nr_validated_ptes = i;
|
||||
page->partial_pte = partial ?: 1;
|
||||
}
|
||||
- else if ( rc == -EINTR )
|
||||
+ else if ( rc < 0 )
|
||||
{
|
||||
+ if ( rc != -EINTR )
|
||||
+ MEM_LOG("Failure in alloc_l4_table: entry %d", i);
|
||||
if ( i )
|
||||
{
|
||||
page->nr_validated_ptes = i;
|
||||
page->partial_pte = 0;
|
||||
- rc = -EAGAIN;
|
||||
+ if ( rc == -EINTR )
|
||||
+ rc = -EAGAIN;
|
||||
+ else
|
||||
+ {
|
||||
+ if ( current->arch.old_guest_table )
|
||||
+ page->nr_validated_ptes++;
|
||||
+ current->arch.old_guest_table = page;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
- else if ( rc < 0 )
|
||||
- {
|
||||
- MEM_LOG("Failure in alloc_l4_table: entry %d", i);
|
||||
- while ( i-- > 0 )
|
||||
- if ( is_guest_l4_slot(d, i) )
|
||||
- put_page_from_l4e(pl4e[i], pfn, 0, 0);
|
||||
- }
|
||||
if ( rc < 0 )
|
||||
return rc;
|
||||
|
||||
@@ -2047,7 +2073,7 @@ static int mod_l3_entry(l3_pgentry_t *pl
|
||||
pae_flush_pgd(pfn, pgentry_ptr_to_slot(pl3e), nl3e);
|
||||
}
|
||||
|
||||
- put_page_from_l3e(ol3e, pfn, 0, 0);
|
||||
+ put_page_from_l3e(ol3e, pfn, 0, -preemptible);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -2110,7 +2136,7 @@ static int mod_l4_entry(l4_pgentry_t *pl
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
- put_page_from_l4e(ol4e, pfn, 0, 0);
|
||||
+ put_page_from_l4e(ol4e, pfn, 0, -preemptible);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -2268,7 +2294,15 @@ static int alloc_page_type(struct page_i
|
||||
PRtype_info ": caf=%08lx taf=%" PRtype_info,
|
||||
page_to_mfn(page), get_gpfn_from_mfn(page_to_mfn(page)),
|
||||
type, page->count_info, page->u.inuse.type_info);
|
||||
- page->u.inuse.type_info = 0;
|
||||
+ if ( page != current->arch.old_guest_table )
|
||||
+ page->u.inuse.type_info = 0;
|
||||
+ else
|
||||
+ {
|
||||
+ ASSERT((page->u.inuse.type_info &
|
||||
+ (PGT_count_mask | PGT_validated)) == 1);
|
||||
+ get_page_light(page);
|
||||
+ page->u.inuse.type_info |= PGT_partial;
|
||||
+ }
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -3218,21 +3252,17 @@ long do_mmuext_op(
|
||||
}
|
||||
|
||||
if ( (rc = xsm_memory_pin_page(d, pg_owner, page)) != 0 )
|
||||
- {
|
||||
- put_page_and_type(page);
|
||||
okay = 0;
|
||||
- break;
|
||||
- }
|
||||
-
|
||||
- if ( unlikely(test_and_set_bit(_PGT_pinned,
|
||||
- &page->u.inuse.type_info)) )
|
||||
+ else if ( unlikely(test_and_set_bit(_PGT_pinned,
|
||||
+ &page->u.inuse.type_info)) )
|
||||
{
|
||||
MEM_LOG("Mfn %lx already pinned", page_to_mfn(page));
|
||||
- put_page_and_type(page);
|
||||
okay = 0;
|
||||
- break;
|
||||
}
|
||||
|
||||
+ if ( unlikely(!okay) )
|
||||
+ goto pin_drop;
|
||||
+
|
||||
/* A page is dirtied when its pin status is set. */
|
||||
paging_mark_dirty(pg_owner, page_to_mfn(page));
|
||||
|
||||
@@ -3246,7 +3276,13 @@ long do_mmuext_op(
|
||||
&page->u.inuse.type_info));
|
||||
spin_unlock(&pg_owner->page_alloc_lock);
|
||||
if ( drop_ref )
|
||||
- put_page_and_type(page);
|
||||
+ {
|
||||
+ pin_drop:
|
||||
+ if ( type == PGT_l1_page_table )
|
||||
+ put_page_and_type(page);
|
||||
+ else
|
||||
+ curr->arch.old_guest_table = page;
|
||||
+ }
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -3652,11 +3688,28 @@ long do_mmu_update(
|
||||
void *va;
|
||||
unsigned long gpfn, gmfn, mfn;
|
||||
struct page_info *page;
|
||||
- int rc = 0, i = 0;
|
||||
- unsigned int cmd, done = 0, pt_dom;
|
||||
- struct vcpu *v = current;
|
||||
+ unsigned int cmd, i = 0, done = 0, pt_dom;
|
||||
+ struct vcpu *curr = current, *v = curr;
|
||||
struct domain *d = v->domain, *pt_owner = d, *pg_owner;
|
||||
struct domain_mmap_cache mapcache;
|
||||
+ int rc = put_old_guest_table(curr);
|
||||
+
|
||||
+ if ( unlikely(rc) )
|
||||
+ {
|
||||
+ if ( likely(rc == -EAGAIN) )
|
||||
+ rc = hypercall_create_continuation(
|
||||
+ __HYPERVISOR_mmu_update, "hihi", ureqs, count, pdone,
|
||||
+ foreigndom);
|
||||
+ return rc;
|
||||
+ }
|
||||
+
|
||||
+ if ( unlikely(count == MMU_UPDATE_PREEMPTED) &&
|
||||
+ likely(guest_handle_is_null(ureqs)) )
|
||||
+ {
|
||||
+ /* See the curr->arch.old_guest_table related
|
||||
+ * hypercall_create_continuation() below. */
|
||||
+ return (int)foreigndom;
|
||||
+ }
|
||||
|
||||
if ( unlikely(count & MMU_UPDATE_PREEMPTED) )
|
||||
{
|
||||
@@ -3705,7 +3758,7 @@ long do_mmu_update(
|
||||
|
||||
for ( i = 0; i < count; i++ )
|
||||
{
|
||||
- if ( hypercall_preempt_check() )
|
||||
+ if ( curr->arch.old_guest_table || hypercall_preempt_check() )
|
||||
{
|
||||
rc = -EAGAIN;
|
||||
break;
|
||||
@@ -3886,9 +3939,27 @@ long do_mmu_update(
|
||||
}
|
||||
|
||||
if ( rc == -EAGAIN )
|
||||
+ {
|
||||
+ ASSERT(i < count);
|
||||
rc = hypercall_create_continuation(
|
||||
__HYPERVISOR_mmu_update, "hihi",
|
||||
ureqs, (count - i) | MMU_UPDATE_PREEMPTED, pdone, foreigndom);
|
||||
+ }
|
||||
+ else if ( curr->arch.old_guest_table )
|
||||
+ {
|
||||
+ XEN_GUEST_HANDLE(void) null;
|
||||
+
|
||||
+ ASSERT(rc || i == count);
|
||||
+ set_xen_guest_handle(null, NULL);
|
||||
+ /*
|
||||
+ * In order to have a way to communicate the final return value to
|
||||
+ * our continuation, we pass this in place of "foreigndom", building
|
||||
+ * on the fact that this argument isn't needed anymore.
|
||||
+ */
|
||||
+ rc = hypercall_create_continuation(
|
||||
+ __HYPERVISOR_mmu_update, "hihi", null,
|
||||
+ MMU_UPDATE_PREEMPTED, null, rc);
|
||||
+ }
|
||||
|
||||
put_pg_owner(pg_owner);
|
||||
|
|
@ -1,127 +0,0 @@
|
|||
x86/xsave: fix information leak on AMD CPUs
|
||||
|
||||
Just like for FXSAVE/FXRSTOR, XSAVE/XRSTOR also don't save/restore the
|
||||
last instruction and operand pointers as well as the last opcode if
|
||||
there's no pending unmasked exception (see CVE-2006-1056 and commit
|
||||
9747:4d667a139318).
|
||||
|
||||
While the FXSR solution sits in the save path, I prefer to have this in
|
||||
the restore path because there the handling is simpler (namely in the
|
||||
context of the pending changes to properly save the selector values for
|
||||
32-bit guest code).
|
||||
|
||||
Also this is using FFREE instead of EMMS, as it doesn't seem unlikely
|
||||
that in the future we may see CPUs with x87 and SSE/AVX but no MMX
|
||||
support. The goal here anyway is just to avoid an FPU stack overflow.
|
||||
I would have preferred to use FFREEP instead of FFREE (freeing two
|
||||
stack slots at once), but AMD doesn't document that instruction.
|
||||
|
||||
This is CVE-2013-2076 / XSA-52.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
|
||||
--- a/xen/arch/x86/xstate.c
|
||||
+++ b/xen/arch/x86/xstate.c
|
||||
@@ -78,6 +78,21 @@ void xrstor(struct vcpu *v, uint64_t mas
|
||||
|
||||
struct xsave_struct *ptr = v->arch.xsave_area;
|
||||
|
||||
+ /*
|
||||
+ * AMD CPUs don't save/restore FDP/FIP/FOP unless an exception
|
||||
+ * is pending. Clear the x87 state here by setting it to fixed
|
||||
+ * values. The hypervisor data segment can be sometimes 0 and
|
||||
+ * sometimes new user value. Both should be ok. Use the FPU saved
|
||||
+ * data block as a safe address because it should be in L1.
|
||||
+ */
|
||||
+ if ( (mask & ptr->xsave_hdr.xstate_bv & XSTATE_FP) &&
|
||||
+ !(ptr->fpu_sse.fsw & 0x0080) &&
|
||||
+ boot_cpu_data.x86_vendor == X86_VENDOR_AMD )
|
||||
+ asm volatile ( "fnclex\n\t" /* clear exceptions */
|
||||
+ "ffree %%st(7)\n\t" /* clear stack tag */
|
||||
+ "fildl %0" /* load to clear state */
|
||||
+ : : "m" (ptr->fpu_sse) );
|
||||
+
|
||||
asm volatile (
|
||||
".byte " REX_PREFIX "0x0f,0xae,0x2f"
|
||||
:
|
||||
#x86/xsave: recover from faults on XRSTOR
|
||||
#
|
||||
#Just like FXRSTOR, XRSTOR can raise #GP if bad content is being passed
|
||||
#to it in the memory block (i.e. aspects not under the control of the
|
||||
#hypervisor, other than e.g. proper alignment of the block).
|
||||
#
|
||||
#Also correct the comment explaining why FXRSTOR needs exception
|
||||
#recovery code to not wrongly state that this can only be a result of
|
||||
#the control tools passing a bad image.
|
||||
#
|
||||
#This is CVE-2013-2077 / XSA-53.
|
||||
#
|
||||
#Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
#
|
||||
--- a/xen/arch/x86/i387.c
|
||||
+++ b/xen/arch/x86/i387.c
|
||||
@@ -53,7 +53,7 @@ static inline void fpu_fxrstor(struct vc
|
||||
/*
|
||||
* FXRSTOR can fault if passed a corrupted data block. We handle this
|
||||
* possibility, which may occur if the block was passed to us by control
|
||||
- * tools, by silently clearing the block.
|
||||
+ * tools or through VCPUOP_initialise, by silently clearing the block.
|
||||
*/
|
||||
asm volatile (
|
||||
#ifdef __i386__
|
||||
--- a/xen/arch/x86/xstate.c
|
||||
+++ b/xen/arch/x86/xstate.c
|
||||
@@ -93,10 +93,25 @@ void xrstor(struct vcpu *v, uint64_t mas
|
||||
"fildl %0" /* load to clear state */
|
||||
: : "m" (ptr->fpu_sse) );
|
||||
|
||||
- asm volatile (
|
||||
- ".byte " REX_PREFIX "0x0f,0xae,0x2f"
|
||||
- :
|
||||
- : "m" (*ptr), "a" (lmask), "d" (hmask), "D"(ptr) );
|
||||
+ /*
|
||||
+ * XRSTOR can fault if passed a corrupted data block. We handle this
|
||||
+ * possibility, which may occur if the block was passed to us by control
|
||||
+ * tools or through VCPUOP_initialise, by silently clearing the block.
|
||||
+ */
|
||||
+ asm volatile ( "1: .byte " REX_PREFIX "0x0f,0xae,0x2f\n"
|
||||
+ ".section .fixup,\"ax\"\n"
|
||||
+ "2: mov %5,%%ecx \n"
|
||||
+ " xor %1,%1 \n"
|
||||
+ " rep stosb \n"
|
||||
+ " lea %2,%0 \n"
|
||||
+ " mov %3,%1 \n"
|
||||
+ " jmp 1b \n"
|
||||
+ ".previous \n"
|
||||
+ _ASM_EXTABLE(1b, 2b)
|
||||
+ : "+&D" (ptr), "+&a" (lmask)
|
||||
+ : "m" (*ptr), "g" (lmask), "d" (hmask),
|
||||
+ "m" (xsave_cntxt_size)
|
||||
+ : "ecx" );
|
||||
}
|
||||
|
||||
bool_t xsave_enabled(const struct vcpu *v)
|
||||
#x86/xsave: properly check guest input to XSETBV
|
||||
#
|
||||
#Other than the HVM emulation path, the PV case so far failed to check
|
||||
#that YMM state requires SSE state to be enabled, allowing for a #GP to
|
||||
#occur upon passing the inputs to XSETBV inside the hypervisor.
|
||||
#
|
||||
#This is CVE-2013-2078 / XSA-54.
|
||||
#
|
||||
#Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
#
|
||||
--- a/xen/arch/x86/traps.c
|
||||
+++ b/xen/arch/x86/traps.c
|
||||
@@ -2205,6 +2205,11 @@ static int emulate_privileged_op(struct
|
||||
if ( !(new_xfeature & XSTATE_FP) || (new_xfeature & ~xfeature_mask) )
|
||||
goto fail;
|
||||
|
||||
+ /* YMM state takes SSE state as prerequisite. */
|
||||
+ if ( (xfeature_mask & new_xfeature & XSTATE_YMM) &&
|
||||
+ !(new_xfeature & XSTATE_SSE) )
|
||||
+ goto fail;
|
||||
+
|
||||
v->arch.xcr0 = new_xfeature;
|
||||
v->arch.xcr0_accum |= new_xfeature;
|
||||
set_xcr0(new_xfeature);
|
|
@ -1,130 +0,0 @@
|
|||
x86: fix page refcount handling in page table pin error path
|
||||
|
||||
In the original patch 7 of the series addressing XSA-45 I mistakenly
|
||||
took the addition of the call to get_page_light() in alloc_page_type()
|
||||
to cover two decrements that would happen: One for the PGT_partial bit
|
||||
that is getting set along with the call, and the other for the page
|
||||
reference the caller hold (and would be dropping on its error path).
|
||||
But of course the additional page reference is tied to the PGT_partial
|
||||
bit, and hence any caller of a function that may leave
|
||||
->arch.old_guest_table non-NULL for error cleanup purposes has to make
|
||||
sure a respective page reference gets retained.
|
||||
|
||||
Similar issues were then also spotted elsewhere: In effect all callers
|
||||
of get_page_type_preemptible() need to deal with errors in similar
|
||||
ways. To make sure error handling can work this way without leaking
|
||||
page references, a respective assertion gets added to that function.
|
||||
|
||||
This is CVE-2013-1432 / XSA-58.
|
||||
|
||||
Reported-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Tested-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||
Reviewed-by: Tim Deegan <tim@xen.org>
|
||||
|
||||
--- a/xen/arch/x86/domain.c
|
||||
+++ b/xen/arch/x86/domain.c
|
||||
@@ -941,6 +941,10 @@ int arch_set_info_guest(
|
||||
if ( v->vcpu_id == 0 )
|
||||
d->vm_assist = c(vm_assist);
|
||||
|
||||
+ rc = put_old_guest_table(current);
|
||||
+ if ( rc )
|
||||
+ return rc;
|
||||
+
|
||||
if ( !compat )
|
||||
rc = (int)set_gdt(v, c.nat->gdt_frames, c.nat->gdt_ents);
|
||||
#ifdef CONFIG_COMPAT
|
||||
@@ -980,18 +984,24 @@ int arch_set_info_guest(
|
||||
}
|
||||
else
|
||||
{
|
||||
- /*
|
||||
- * Since v->arch.guest_table{,_user} are both NULL, this effectively
|
||||
- * is just a call to put_old_guest_table().
|
||||
- */
|
||||
if ( !compat )
|
||||
- rc = vcpu_destroy_pagetables(v);
|
||||
+ rc = put_old_guest_table(v);
|
||||
if ( !rc )
|
||||
rc = get_page_type_preemptible(cr3_page,
|
||||
!compat ? PGT_root_page_table
|
||||
: PGT_l3_page_table);
|
||||
- if ( rc == -EINTR )
|
||||
+ switch ( rc )
|
||||
+ {
|
||||
+ case -EINTR:
|
||||
rc = -EAGAIN;
|
||||
+ case -EAGAIN:
|
||||
+ case 0:
|
||||
+ break;
|
||||
+ default:
|
||||
+ if ( cr3_page == current->arch.old_guest_table )
|
||||
+ cr3_page = NULL;
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
if ( rc )
|
||||
/* handled below */;
|
||||
@@ -1018,6 +1028,11 @@ int arch_set_info_guest(
|
||||
pagetable_get_page(v->arch.guest_table);
|
||||
v->arch.guest_table = pagetable_null();
|
||||
break;
|
||||
+ default:
|
||||
+ if ( cr3_page == current->arch.old_guest_table )
|
||||
+ cr3_page = NULL;
|
||||
+ case 0:
|
||||
+ break;
|
||||
}
|
||||
}
|
||||
if ( !rc )
|
||||
--- a/xen/arch/x86/mm.c
|
||||
+++ b/xen/arch/x86/mm.c
|
||||
@@ -718,7 +718,8 @@ static int get_page_and_type_from_pagenr
|
||||
get_page_type_preemptible(page, type) :
|
||||
(get_page_type(page, type) ? 0 : -EINVAL));
|
||||
|
||||
- if ( unlikely(rc) && partial >= 0 )
|
||||
+ if ( unlikely(rc) && partial >= 0 &&
|
||||
+ (!preemptible || page != current->arch.old_guest_table) )
|
||||
put_page(page);
|
||||
|
||||
return rc;
|
||||
@@ -2638,6 +2639,7 @@ int put_page_type_preemptible(struct pag
|
||||
|
||||
int get_page_type_preemptible(struct page_info *page, unsigned long type)
|
||||
{
|
||||
+ ASSERT(!current->arch.old_guest_table);
|
||||
return __get_page_type(page, type, 1);
|
||||
}
|
||||
|
||||
@@ -2848,7 +2850,7 @@ static void put_superpage(unsigned long
|
||||
|
||||
#endif
|
||||
|
||||
-static int put_old_guest_table(struct vcpu *v)
|
||||
+int put_old_guest_table(struct vcpu *v)
|
||||
{
|
||||
int rc;
|
||||
|
||||
@@ -3253,7 +3255,8 @@ long do_mmuext_op(
|
||||
rc = -EAGAIN;
|
||||
else if ( rc != -EAGAIN )
|
||||
MEM_LOG("Error while pinning mfn %lx", page_to_mfn(page));
|
||||
- put_page(page);
|
||||
+ if ( page != curr->arch.old_guest_table )
|
||||
+ put_page(page);
|
||||
break;
|
||||
}
|
||||
|
||||
--- a/xen/include/asm-x86/mm.h
|
||||
+++ b/xen/include/asm-x86/mm.h
|
||||
@@ -374,6 +374,7 @@ void put_page_type(struct page_info *pag
|
||||
int get_page_type(struct page_info *page, unsigned long type);
|
||||
int put_page_type_preemptible(struct page_info *page);
|
||||
int get_page_type_preemptible(struct page_info *page, unsigned long type);
|
||||
+int put_old_guest_table(struct vcpu *);
|
||||
int get_page_from_l1e(
|
||||
l1_pgentry_t l1e, struct domain *l1e_owner, struct domain *pg_owner);
|
||||
void put_page_from_l1e(l1_pgentry_t l1e, struct domain *l1e_owner);
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
x86: restrict XEN_DOMCTL_getmemlist
|
||||
|
||||
Coverity ID 1055652
|
||||
|
||||
(See the code comment.)
|
||||
|
||||
This is CVE-2013-4553 / XSA-74.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||
Reviewed-by: Tim Deegan <tim@xen.org>
|
||||
|
||||
--- a/xen/arch/x86/domctl.c
|
||||
+++ b/xen/arch/x86/domctl.c
|
||||
@@ -385,6 +385,26 @@ long arch_do_domctl(
|
||||
break;
|
||||
}
|
||||
|
||||
+ /*
|
||||
+ * XSA-74: This sub-hypercall is broken in several ways:
|
||||
+ * - lock order inversion (p2m locks inside page_alloc_lock)
|
||||
+ * - no preemption on huge max_pfns input
|
||||
+ * - not (re-)checking d->is_dying with page_alloc_lock held
|
||||
+ * - not honoring start_pfn input (which libxc also doesn't set)
|
||||
+ * Additionally it is rather useless, as the result is stale by
|
||||
+ * the time the caller gets to look at it.
|
||||
+ * As it only has a single, non-production consumer (xen-mceinj),
|
||||
+ * rather than trying to fix it we restrict it for the time being.
|
||||
+ */
|
||||
+ if ( /* No nested locks inside copy_to_guest_offset(). */
|
||||
+ paging_mode_external(current->domain) ||
|
||||
+ /* Arbitrary limit capping processing time. */
|
||||
+ max_pfns > GB(4) / PAGE_SIZE )
|
||||
+ {
|
||||
+ ret = -EOPNOTSUPP;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
spin_lock(&d->page_alloc_lock);
|
||||
|
||||
if ( unlikely(d->is_dying) ) {
|
|
@ -1,153 +0,0 @@
|
|||
flask: fix reading strings from guest memory
|
||||
|
||||
Since the string size is being specified by the guest, we must range
|
||||
check it properly before doing allocations based on it. While for the
|
||||
two cases that are exposed only to trusted guests (via policy
|
||||
restriction) this just uses an arbitrary upper limit (PAGE_SIZE), for
|
||||
the FLASK_[GS]ETBOOL case (which any guest can use) the upper limit
|
||||
gets enforced based on the longest name across all boolean settings.
|
||||
|
||||
This is XSA-84.
|
||||
|
||||
Reported-by: Matthew Daley <mattd@bugfuzz.com>
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Acked-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
|
||||
|
||||
--- a/xen/xsm/flask/flask_op.c
|
||||
+++ b/xen/xsm/flask/flask_op.c
|
||||
@@ -53,6 +53,7 @@ static DEFINE_SPINLOCK(sel_sem);
|
||||
/* global data for booleans */
|
||||
static int bool_num = 0;
|
||||
static int *bool_pending_values = NULL;
|
||||
+static size_t bool_maxstr;
|
||||
static int flask_security_make_bools(void);
|
||||
|
||||
extern int ss_initialized;
|
||||
@@ -71,9 +72,15 @@ static int domain_has_security(struct do
|
||||
perms, NULL);
|
||||
}
|
||||
|
||||
-static int flask_copyin_string(XEN_GUEST_HANDLE(char) u_buf, char **buf, uint32_t size)
|
||||
+static int flask_copyin_string(XEN_GUEST_HANDLE(char) u_buf, char **buf,
|
||||
+ size_t size, size_t max_size)
|
||||
{
|
||||
- char *tmp = xmalloc_bytes(size + 1);
|
||||
+ char *tmp;
|
||||
+
|
||||
+ if ( size > max_size )
|
||||
+ return -ENOENT;
|
||||
+
|
||||
+ tmp = xmalloc_array(char, size + 1);
|
||||
if ( !tmp )
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -99,7 +106,7 @@ static int flask_security_user(struct xe
|
||||
if ( rv )
|
||||
return rv;
|
||||
|
||||
- rv = flask_copyin_string(arg->u.user, &user, arg->size);
|
||||
+ rv = flask_copyin_string(arg->u.user, &user, arg->size, PAGE_SIZE);
|
||||
if ( rv )
|
||||
return rv;
|
||||
|
||||
@@ -210,7 +217,7 @@ static int flask_security_context(struct
|
||||
if ( rv )
|
||||
return rv;
|
||||
|
||||
- rv = flask_copyin_string(arg->context, &buf, arg->size);
|
||||
+ rv = flask_copyin_string(arg->context, &buf, arg->size, PAGE_SIZE);
|
||||
if ( rv )
|
||||
return rv;
|
||||
|
||||
@@ -303,7 +310,7 @@ static int flask_security_resolve_bool(s
|
||||
if ( arg->bool_id != -1 )
|
||||
return 0;
|
||||
|
||||
- rv = flask_copyin_string(arg->name, &name, arg->size);
|
||||
+ rv = flask_copyin_string(arg->name, &name, arg->size, bool_maxstr);
|
||||
if ( rv )
|
||||
return rv;
|
||||
|
||||
@@ -334,7 +341,7 @@ static int flask_security_set_bool(struc
|
||||
int num;
|
||||
int *values;
|
||||
|
||||
- rv = security_get_bools(&num, NULL, &values);
|
||||
+ rv = security_get_bools(&num, NULL, &values, NULL);
|
||||
if ( rv != 0 )
|
||||
goto out;
|
||||
|
||||
@@ -440,7 +447,7 @@ static int flask_security_make_bools(voi
|
||||
|
||||
xfree(bool_pending_values);
|
||||
|
||||
- ret = security_get_bools(&num, NULL, &values);
|
||||
+ ret = security_get_bools(&num, NULL, &values, &bool_maxstr);
|
||||
if ( ret != 0 )
|
||||
goto out;
|
||||
|
||||
--- a/xen/xsm/flask/include/conditional.h
|
||||
+++ b/xen/xsm/flask/include/conditional.h
|
||||
@@ -13,7 +13,9 @@
|
||||
#ifndef _FLASK_CONDITIONAL_H_
|
||||
#define _FLASK_CONDITIONAL_H_
|
||||
|
||||
-int security_get_bools(int *len, char ***names, int **values);
|
||||
+#include <xen/types.h>
|
||||
+
|
||||
+int security_get_bools(int *len, char ***names, int **values, size_t *maxstr);
|
||||
|
||||
int security_set_bools(int len, int *values);
|
||||
|
||||
--- a/xen/xsm/flask/ss/services.c
|
||||
+++ b/xen/xsm/flask/ss/services.c
|
||||
@@ -1900,7 +1900,7 @@ int security_find_bool(const char *name)
|
||||
return rv;
|
||||
}
|
||||
|
||||
-int security_get_bools(int *len, char ***names, int **values)
|
||||
+int security_get_bools(int *len, char ***names, int **values, size_t *maxstr)
|
||||
{
|
||||
int i, rc = -ENOMEM;
|
||||
|
||||
@@ -1908,6 +1908,8 @@ int security_get_bools(int *len, char **
|
||||
if ( names )
|
||||
*names = NULL;
|
||||
*values = NULL;
|
||||
+ if ( maxstr )
|
||||
+ *maxstr = 0;
|
||||
|
||||
*len = policydb.p_bools.nprim;
|
||||
if ( !*len )
|
||||
@@ -1929,16 +1931,17 @@ int security_get_bools(int *len, char **
|
||||
|
||||
for ( i = 0; i < *len; i++ )
|
||||
{
|
||||
- size_t name_len;
|
||||
+ size_t name_len = strlen(policydb.p_bool_val_to_name[i]);
|
||||
+
|
||||
(*values)[i] = policydb.bool_val_to_struct[i]->state;
|
||||
if ( names ) {
|
||||
- name_len = strlen(policydb.p_bool_val_to_name[i]) + 1;
|
||||
- (*names)[i] = (char*)xmalloc_array(char, name_len);
|
||||
+ (*names)[i] = xmalloc_array(char, name_len + 1);
|
||||
if ( !(*names)[i] )
|
||||
goto err;
|
||||
- strlcpy((*names)[i], policydb.p_bool_val_to_name[i], name_len);
|
||||
- (*names)[i][name_len - 1] = 0;
|
||||
+ strlcpy((*names)[i], policydb.p_bool_val_to_name[i], name_len + 1);
|
||||
}
|
||||
+ if ( maxstr && name_len > *maxstr )
|
||||
+ *maxstr = name_len;
|
||||
}
|
||||
rc = 0;
|
||||
out:
|
||||
@@ -2056,7 +2059,7 @@ static int security_preserve_bools(struc
|
||||
struct cond_bool_datum *booldatum;
|
||||
struct cond_node *cur;
|
||||
|
||||
- rc = security_get_bools(&nbools, &bnames, &bvalues);
|
||||
+ rc = security_get_bools(&nbools, &bnames, &bvalues, NULL);
|
||||
if ( rc )
|
||||
goto out;
|
||||
for ( i = 0; i < nbools; i++ )
|
|
@ -1,31 +0,0 @@
|
|||
From 593bc8c63d582ec0fc2b3a35336106cf9c3a8b34 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Daley <mattd@bugfuzz.com>
|
||||
Date: Sun, 12 Jan 2014 14:29:32 +1300
|
||||
Subject: [PATCH] xsm/flask: correct off-by-one in
|
||||
flask_security_avc_cachestats cpu id check
|
||||
|
||||
This is XSA-85
|
||||
|
||||
Signed-off-by: Matthew Daley <mattd@bugfuzz.com>
|
||||
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
||||
Reviewed-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
---
|
||||
xen/xsm/flask/flask_op.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/xen/xsm/flask/flask_op.c b/xen/xsm/flask/flask_op.c
|
||||
index 4426ab9..22878f5 100644
|
||||
--- a/xen/xsm/flask/flask_op.c
|
||||
+++ b/xen/xsm/flask/flask_op.c
|
||||
@@ -457,7 +457,7 @@ static int flask_security_avc_cachestats(struct xen_flask_cache_stats *arg)
|
||||
{
|
||||
struct avc_cache_stats *st;
|
||||
|
||||
- if ( arg->cpu > nr_cpu_ids )
|
||||
+ if ( arg->cpu >= nr_cpu_ids )
|
||||
return -ENOENT;
|
||||
if ( !cpu_online(arg->cpu) )
|
||||
return -ENOENT;
|
||||
--
|
||||
1.8.5.2
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
x86: PHYSDEVOP_{prepare,release}_msix are privileged
|
||||
|
||||
Yet this wasn't being enforced.
|
||||
|
||||
This is XSA-87.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
|
||||
--- a/xen/arch/x86/physdev.c
|
||||
+++ b/xen/arch/x86/physdev.c
|
||||
@@ -612,7 +612,9 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_H
|
||||
case PHYSDEVOP_release_msix: {
|
||||
struct physdev_pci_device dev;
|
||||
|
||||
- if ( copy_from_guest(&dev, arg, 1) )
|
||||
+ if ( !IS_PRIV(v->domain) )
|
||||
+ ret = -EPERM;
|
||||
+ else if ( copy_from_guest(&dev, arg, 1) )
|
||||
ret = -EFAULT;
|
||||
else
|
||||
ret = pci_prepare_msix(dev.seg, dev.bus, dev.devfn,
|
|
@ -1,46 +0,0 @@
|
|||
x86/xsave: initialize extended register state when guests enable it
|
||||
|
||||
Till now, when setting previously unset bits in XCR0 we wouldn't touch
|
||||
the active register state, thus leaving in the newly enabled registers
|
||||
whatever a prior user of it left there, i.e. potentially leaking
|
||||
information between guests.
|
||||
|
||||
This is CVE-2013-1442 / XSA-62.
|
||||
|
||||
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
||||
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||||
|
||||
--- a/xen/arch/x86/xstate.c
|
||||
+++ b/xen/arch/x86/xstate.c
|
||||
@@ -307,6 +307,7 @@ int validate_xstate(u64 xcr0, u64 xcr0_a
|
||||
int handle_xsetbv(u32 index, u64 new_bv)
|
||||
{
|
||||
struct vcpu *curr = current;
|
||||
+ u64 mask;
|
||||
|
||||
if ( index != XCR_XFEATURE_ENABLED_MASK )
|
||||
return -EOPNOTSUPP;
|
||||
@@ -320,9 +321,23 @@ int handle_xsetbv(u32 index, u64 new_bv)
|
||||
if ( !set_xcr0(new_bv) )
|
||||
return -EFAULT;
|
||||
|
||||
+ mask = new_bv & ~curr->arch.xcr0_accum;
|
||||
curr->arch.xcr0 = new_bv;
|
||||
curr->arch.xcr0_accum |= new_bv;
|
||||
|
||||
+ mask &= curr->fpu_dirtied ? ~XSTATE_FP_SSE : XSTATE_NONLAZY;
|
||||
+ if ( mask )
|
||||
+ {
|
||||
+ unsigned long cr0 = read_cr0();
|
||||
+
|
||||
+ clts();
|
||||
+ if ( curr->fpu_dirtied )
|
||||
+ asm ( "stmxcsr %0" : "=m" (curr->arch.xsave_area->fpu_sse.mxcsr) );
|
||||
+ xrstor(curr, mask);
|
||||
+ if ( cr0 & X86_CR0_TS )
|
||||
+ write_cr0(cr0);
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue