From 89078f01a2f66cfc760d7c12ab93eef785db857d Mon Sep 17 00:00:00 2001 From: Alexander Vdolainen Date: Mon, 20 Mar 2023 01:08:19 +0200 Subject: [PATCH] added example and kernel patch --- daemon/dsbus/AUTHORS | 2 + daemon/dsbus/COPYING | 674 +++ daemon/dsbus/ChangeLog | 0 daemon/dsbus/INSTALL | 370 ++ daemon/dsbus/Makefile.am | 8 + daemon/dsbus/NEWS | 0 daemon/dsbus/README | 0 daemon/dsbus/autogen.sh | 157 + daemon/dsbus/configure.ac | 22 + daemon/dsbus/daemon/Makefile.am | 16 + daemon/dsbus/daemon/audit.c | 89 + daemon/dsbus/daemon/daemon.c | 949 ++++ daemon/dsbus/daemon/netlink.c | 114 + daemon/dsbus/daemon/storage.c | 232 + daemon/dsbus/daemon/support.c | 236 + daemon/dsbus/include/dsbus/daemon.h | 135 + daemon/dsbus/include/dsbus/data.h | 87 + daemon/dsbus/tools/Makefile.am | 16 + daemon/dsbus/tools/fcntl.c | 251 + linux kernel patch/dsbv2.patch | 7835 +++++++++++++++++++++++++++ 20 files changed, 11193 insertions(+) create mode 100644 daemon/dsbus/AUTHORS create mode 100644 daemon/dsbus/COPYING create mode 100644 daemon/dsbus/ChangeLog create mode 100644 daemon/dsbus/INSTALL create mode 100644 daemon/dsbus/Makefile.am create mode 100644 daemon/dsbus/NEWS create mode 100644 daemon/dsbus/README create mode 100755 daemon/dsbus/autogen.sh create mode 100644 daemon/dsbus/configure.ac create mode 100644 daemon/dsbus/daemon/Makefile.am create mode 100644 daemon/dsbus/daemon/audit.c create mode 100644 daemon/dsbus/daemon/daemon.c create mode 100644 daemon/dsbus/daemon/netlink.c create mode 100644 daemon/dsbus/daemon/storage.c create mode 100644 daemon/dsbus/daemon/support.c create mode 100644 daemon/dsbus/include/dsbus/daemon.h create mode 100644 daemon/dsbus/include/dsbus/data.h create mode 100644 daemon/dsbus/tools/Makefile.am create mode 100644 daemon/dsbus/tools/fcntl.c create mode 100644 linux kernel patch/dsbv2.patch diff --git a/daemon/dsbus/AUTHORS b/daemon/dsbus/AUTHORS new file mode 100644 index 0000000..d439c4f --- /dev/null +++ b/daemon/dsbus/AUTHORS @@ -0,0 +1,2 @@ +Originally written by Alexander Vdolainen + diff --git a/daemon/dsbus/COPYING b/daemon/dsbus/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/daemon/dsbus/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/daemon/dsbus/ChangeLog b/daemon/dsbus/ChangeLog new file mode 100644 index 0000000..e69de29 diff --git a/daemon/dsbus/INSTALL b/daemon/dsbus/INSTALL new file mode 100644 index 0000000..2099840 --- /dev/null +++ b/daemon/dsbus/INSTALL @@ -0,0 +1,370 @@ +Installation Instructions +************************* + +Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, +Inc. + + Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without warranty of any kind. + +Basic Installation +================== + + Briefly, the shell command `./configure && make && make install' +should configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. Some packages provide this +`INSTALL' file but do not implement all of the features documented +below. The lack of an optional feature in a given package is not +necessarily a bug. More recommendations for GNU packages can be found +in *note Makefile Conventions: (standards)Makefile Conventions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + + The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package, generally using the just-built uninstalled binaries. + + 4. Type `make install' to install the programs and any data files and + documentation. When installing into a prefix owned by root, it is + recommended that the package be configured and built as a regular + user, and only the `make install' phase executed with root + privileges. + + 5. Optionally, type `make installcheck' to repeat any self-tests, but + this time using the binaries in their final installed location. + This target does not install anything. Running this target as a + regular user, particularly if the prior `make install' required + root privileges, verifies that the installation completed + correctly. + + 6. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + + 7. Often, you can also type `make uninstall' to remove the installed + files again. In practice, not all packages have tested that + uninstallation works correctly, even though it is required by the + GNU Coding Standards. + + 8. Some packages, particularly those that use Automake, provide `make + distcheck', which can by used by developers to test that all other + targets like `make install' and `make uninstall' work correctly. + This target is generally not run by end users. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. This +is known as a "VPATH" build. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. + +Installation Names +================== + + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX', where PREFIX must be an +absolute file name. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. In general, the +default for these options is expressed in terms of `${prefix}', so that +specifying just `--prefix' will affect all of the other directory +specifications that were not explicitly provided. + + The most portable way to affect installation locations is to pass the +correct locations to `configure'; however, many packages provide one or +both of the following shortcuts of passing variable assignments to the +`make install' command line to change installation locations without +having to reconfigure or recompile. + + The first method involves providing an override variable for each +affected directory. For example, `make install +prefix=/alternate/directory' will choose an alternate location for all +directory configuration variables that were expressed in terms of +`${prefix}'. Any directories that were specified during `configure', +but not in terms of `${prefix}', must each be overridden at install +time for the entire installation to be relocated. The approach of +makefile variable overrides for each directory variable is required by +the GNU Coding Standards, and ideally causes no recompilation. +However, some platforms have known limitations with the semantics of +shared libraries that end up requiring recompilation when using this +method, particularly noticeable in packages that use GNU Libtool. + + The second method involves providing the `DESTDIR' variable. For +example, `make install DESTDIR=/alternate/directory' will prepend +`/alternate/directory' before all installation names. The approach of +`DESTDIR' overrides is not required by the GNU Coding Standards, and +does not work on platforms that have drive letters. On the other hand, +it does better at avoiding recompilation issues, and works well even +when some directory options were not specified in terms of `${prefix}' +at `configure' time. + +Optional Features +================= + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + + Some packages offer the ability to configure how verbose the +execution of `make' will be. For these packages, running `./configure +--enable-silent-rules' sets the default to minimal output, which can be +overridden with `make V=1'; while running `./configure +--disable-silent-rules' sets the default to verbose, which can be +overridden with `make V=0'. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + HP-UX `make' updates targets which have the same time stamps as +their prerequisites, which makes it generally unusable when shipped +generated files such as `configure' are involved. Use GNU `make' +instead. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS + KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf limitation. Until the limitation is lifted, you can use +this workaround: + + CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. diff --git a/daemon/dsbus/Makefile.am b/daemon/dsbus/Makefile.am new file mode 100644 index 0000000..0531fe6 --- /dev/null +++ b/daemon/dsbus/Makefile.am @@ -0,0 +1,8 @@ +## Process this file with automake to produce Makefile.in + +SUBDIRS = daemon tools + +clean-local: + +# Remove doc directory on uninstall +uninstall-local: diff --git a/daemon/dsbus/NEWS b/daemon/dsbus/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/daemon/dsbus/README b/daemon/dsbus/README new file mode 100644 index 0000000..e69de29 diff --git a/daemon/dsbus/autogen.sh b/daemon/dsbus/autogen.sh new file mode 100755 index 0000000..a0ec5ee --- /dev/null +++ b/daemon/dsbus/autogen.sh @@ -0,0 +1,157 @@ +#!/bin/sh +# Run this to generate all the initial makefiles, etc. + +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. + +DIE=0 + +if [ -n "$GNOME2_DIR" ]; then + ACLOCAL_FLAGS="-I $GNOME2_DIR/share/aclocal $ACLOCAL_FLAGS" + LD_LIBRARY_PATH="$GNOME2_DIR/lib:$LD_LIBRARY_PATH" + PATH="$GNOME2_DIR/bin:$PATH" + export PATH + export LD_LIBRARY_PATH +fi + +(test -f $srcdir/configure.ac) || { + echo -n "**Error**: Directory "\`$srcdir\'" does not look like the" + echo " top-level package directory" + exit 1 +} + +(autoconf --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`autoconf' installed." + echo "Download the appropriate package for your distribution," + echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +} + +(grep "^IT_PROG_INTLTOOL" $srcdir/configure.ac >/dev/null) && { + (intltoolize --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`intltool' installed." + echo "You can get it from:" + echo " ftp://ftp.gnome.org/pub/GNOME/" + DIE=1 + } +} + +(grep "^AM_PROG_XML_I18N_TOOLS" $srcdir/configure.ac >/dev/null) && { + (xml-i18n-toolize --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`xml-i18n-toolize' installed." + echo "You can get it from:" + echo " ftp://ftp.gnome.org/pub/GNOME/" + DIE=1 + } +} + +(grep "^LT_INIT" $srcdir/configure.ac >/dev/null) && { + (libtool --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`libtool' installed." + echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/" + DIE=1 + } +} + +(grep "^AM_GLIB_GNU_GETTEXT" $srcdir/configure.ac >/dev/null) && { + (grep "sed.*POTFILES" $srcdir/configure.ac) > /dev/null || \ + (glib-gettextize --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`glib' installed." + echo "You can get it from: ftp://ftp.gtk.org/pub/gtk" + DIE=1 + } +} + +(automake --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`automake' installed." + echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/" + DIE=1 + NO_AUTOMAKE=yes +} + + +# if no automake, don't bother testing for aclocal +test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: Missing \`aclocal'. The version of \`automake'" + echo "installed doesn't appear recent enough." + echo "You can get automake from ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +} + +if test "$DIE" -eq 1; then + exit 1 +fi + +if test -z "$*"; then + echo "**Warning**: I am going to run \`configure' with no arguments." + echo "If you wish to pass any to it, please specify them on the" + echo \`$0\'" command line." + echo +fi + +case $CC in +xlc ) + am_opt=--include-deps;; +esac + +for coin in `find $srcdir -path $srcdir/CVS -prune -o -name configure.ac -print` +do + dr=`dirname $coin` + if test -f $dr/NO-AUTO-GEN; then + echo skipping $dr -- flagged as no auto-gen + else + echo processing $dr + ( cd $dr + + aclocalinclude="$ACLOCAL_FLAGS" + + if grep "^AM_GLIB_GNU_GETTEXT" configure.ac >/dev/null; then + echo "Creating $dr/aclocal.m4 ..." + test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 + echo "Running glib-gettextize... Ignore non-fatal messages." + echo "no" | glib-gettextize --force --copy + echo "Making $dr/aclocal.m4 writable ..." + test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 + fi + if grep "^IT_PROG_INTLTOOL" configure.ac >/dev/null; then + echo "Running intltoolize..." + intltoolize --copy --force --automake + fi + if grep "^AM_PROG_XML_I18N_TOOLS" configure.ac >/dev/null; then + echo "Running xml-i18n-toolize..." + xml-i18n-toolize --copy --force --automake + fi + if grep "^LT_INIT" configure.ac >/dev/null; then + if test -z "$NO_LIBTOOLIZE" ; then + echo "Running libtoolize..." + libtoolize --force --copy + fi + fi + echo "Running aclocal $aclocalinclude ..." + aclocal $aclocalinclude + if grep "^A[CM]_CONFIG_HEADER" configure.ac >/dev/null; then + echo "Running autoheader..." + autoheader + fi + echo "Running automake --gnu $am_opt ..." + automake --add-missing --copy --gnu $am_opt + echo "Running autoconf ..." + autoconf + ) + fi +done + +if test x$NOCONFIGURE = x; then + echo Running $srcdir/configure "$@" ... + $srcdir/configure "$@" \ + && echo Now type \`make\' to compile. || exit 1 +else + echo Skipping configure process. +fi diff --git a/daemon/dsbus/configure.ac b/daemon/dsbus/configure.ac new file mode 100644 index 0000000..e1ad043 --- /dev/null +++ b/daemon/dsbus/configure.ac @@ -0,0 +1,22 @@ +dnl Process this file with autoconf to produce a configure script. + +AC_INIT(dsbus, 0.1) + +AC_CONFIG_HEADERS([config.h]) + +AM_INIT_AUTOMAKE([1.11]) + +AM_SILENT_RULES([yes]) + +AC_PROG_CC + +LT_INIT + +PKG_CHECK_MODULES(LIBTDATA, [libtdata >= 0.2.2]) +PKG_CHECK_MODULES(LIBSEXPR, [libsexpr >= 1.3.1]) +dnl PKG_CHECK_MODULES(LIBBLKID, [libblkid]) + +AC_OUTPUT([ +Makefile +daemon/Makefile +tools/Makefile]) diff --git a/daemon/dsbus/daemon/Makefile.am b/daemon/dsbus/daemon/Makefile.am new file mode 100644 index 0000000..8bbe83d --- /dev/null +++ b/daemon/dsbus/daemon/Makefile.am @@ -0,0 +1,16 @@ +## AUTOMAKE_OPTIONS = foreign + +AM_CPPFLAGS = \ + -DPACKAGE_LOCALE_DIR=\""$(localedir)"\" \ + -DPACKAGE_SRC_DIR=\""$(srcdir)"\" \ + -DPACKAGE_DATA_DIR=\""$(pkgdatadir)"\" \ + -DCNFPATH=\""$(prefix)/etc"\" \ + -I../include + +AM_CFLAGS = -Wall -g + +bin_PROGRAMS = dsbusd + +dsbusd_SOURCES = daemon.c netlink.c storage.c audit.c support.c +dsbusd_LDADD = $(LIBTDATA_LIBS) $(LIBSEXPR_LIBS) -lpthread + diff --git a/daemon/dsbus/daemon/audit.c b/daemon/dsbus/daemon/audit.c new file mode 100644 index 0000000..06657f3 --- /dev/null +++ b/daemon/dsbus/daemon/audit.c @@ -0,0 +1,89 @@ +/* + * Originally written by Alexander Vdolainen + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define MAX_PAYLOAD 512 + +static int __remove_object_storage(FILE *out, dsb_secstore_t *storage, + uint64_t hash) +{ + int r = dsb_store_remove(storage, hash); + + /* NOTE: here the place to put the callback */ + + return r; +} + +void events_loop(FILE *out, struct dsbd_ctx *gctx, int fd) +{ + sexp_t *sx, *isx; + int idx; + uint64_t hash; + dsb_secstore_t *storage = gctx->storage; + char *datamsg, *cmd; + struct nlmsghdr *nlh = (struct nlmsghdr *)malloc(NLMSG_SPACE(MAX_PAYLOAD)); + struct iovec iov; + struct msghdr msg; + struct sockaddr_nl src_addr, dest_addr; + + for(;;) { + memset(&src_addr, 0, sizeof(src_addr)); + src_addr.nl_family = AF_NETLINK; + src_addr.nl_pid = getpid(); /* self pid */ + + memset(nlh, 0, NLMSG_SPACE(MAX_PAYLOAD)); + memset(&dest_addr, 0, sizeof(dest_addr)); + + iov.iov_base = (void *)nlh; + iov.iov_len = NLMSG_SPACE(MAX_PAYLOAD); + msg.msg_name = (void *)&dest_addr; + msg.msg_namelen = sizeof(dest_addr); + msg.msg_iov = &iov; + msg.msg_iovlen = 1; + + /* Read message from kernel */ + recvmsg(fd, &msg, 0); + datamsg = NLMSG_DATA(nlh); + + if(strlen(datamsg) && (sx = parse_sexp(datamsg, strlen(datamsg)))) { + SEXP_ITERATE_LIST(sx, isx, idx) { + if(isx->ty == SEXP_LIST) goto __badprot; + switch(idx) { + case 0: + cmd = isx->val; + break; + case 2: + hash = strtoul(isx->val, NULL, 0); + break; + } + } + if(idx < 2) goto __badprot; + + if(!strcmp(cmd, "rm-object")) __remove_object_storage(out, storage, hash); + + __badprot: + destroy_sexp(sx); + } + } +} + diff --git a/daemon/dsbus/daemon/daemon.c b/daemon/dsbus/daemon/daemon.c new file mode 100644 index 0000000..041fdc5 --- /dev/null +++ b/daemon/dsbus/daemon/daemon.c @@ -0,0 +1,949 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */ +/* + * Originally written by Alexander Vdolainen + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + + +static void __print_version(void) +{ + fprintf(stdout, "DSB user space daemon version: 0.1\n\n"); + fprintf(stdout, "Copyright (c) 2015-2016 Alexander Vdolainen.\nEmail: avdolainen@gmail.com\n\n"); + + return; +} + +static void __print_help(void) +{ + fprintf(stdout, "Usage: dsbusd [options]\nOptions:\n"); + fprintf(stdout, " --daemonize(-d)\t Daemonize at startup for normal init system.\n"); + fprintf(stdout, " --systemd(-s)\t Daemonize adopted for idiots init system i.e. systemd.\n"); + fprintf(stdout, " --config-file-path(-c) \t Use as the configuration file.\n"); + fprintf(stdout, " --unix-socket-path(-u) \t Use as the unix socket name.\n"); + fprintf(stdout, " --log-file-path(-l) \t Use as the logging output.\n"); + fprintf(stdout, " --help(-h)\t Print there help message\n"); + fprintf(stdout, " --version(-v)\t Print version information\n"); + fprintf(stdout, "\nFor further information check out provided documentation.\n"); + return; +} + +/* this version of skeleton daemon targeted for the normal init system + * i.e. sysvinit, openrc, bsd-style init etc... + * it will works with systemd like other usual *nix daemon. + * there are no sense to make a lot of code for each weird init system + */ +static void skeleton_daemon() +{ + pid_t pid; + int x; + + /* Fork off the parent process */ + pid = fork(); + + /* An error occurred */ + if(pid < 0) + exit(EXIT_FAILURE); + + /* Success: Let the parent terminate */ + if(pid > 0) + exit(EXIT_SUCCESS); + + /* On success: The child process becomes session leader */ + if(setsid() < 0) + exit(EXIT_FAILURE); + + /* Catch, ignore and handle signals */ + signal(SIGCHLD, SIG_IGN); + signal(SIGHUP, SIG_IGN); + + /* Fork off for the second time*/ + pid = fork(); + + /* An error occurred */ + if(pid < 0) + exit(EXIT_FAILURE); + + /* Success: Let the parent terminate */ + if(pid > 0) + exit(EXIT_SUCCESS); + + /* TODO: FIXME: Set new file permissions */ + //umask(0); + + /* TODO: FIXME: Change the working directory to the root directory */ + /* or another appropriated directory */ + //chdir("/"); + + /* Close all open file descriptors */ + for(x = sysconf(_SC_OPEN_MAX); x>0; x--) { + close(x); + } + + /* Open the log file */ + openlog("dsbusd", LOG_PID, LOG_DAEMON); + + return; +} + +static void *__unixsocket_thread(void *arg) +{ + struct dsbd_ctx *gctx = (struct dsbd_ctx *)arg; + int s, len, s2; + socklen_t t; + struct sockaddr_un local, remote; + struct _payload *pload; + char buf[4096]; + + if(!gctx) return NULL; + + if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { + perror("socket"); + exit(1); + } + + local.sun_family = AF_UNIX; + strcpy(local.sun_path, (const char *)gctx->unixsck_path); + unlink(local.sun_path); + len = strlen(local.sun_path) + sizeof(local.sun_family); + if (bind(s, (struct sockaddr *)&local, len) == -1) { + syslog(LOG_CRIT, "Unable to create a unix socket for cmds.\n"); + return NULL; + } + + if (listen(s, MAX_BACKLOG_CONNECTIONS) == -1) { + syslog(LOG_CRIT, "Unable to listen a unix socket for cmds.\n"); + return NULL; + } + + for(;;) { + int done, n; + t = sizeof(remote); + if ((s2 = accept(s, (struct sockaddr *)&remote, &t)) == -1) { + syslog(LOG_CRIT, "Unable to accept a unix socket connection for cmds.\n"); + return NULL; + } + + done = 0; + do { + n = recv(s2, buf, sizeof(char)*4096, 0); + if (n <= 0) { + if (n < 0) perror("recv"); + done = 1; + } + + if (!done) { + /* let's deal with that */ + pload = malloc(sizeof(struct _payload)); + if(!pload) { + syslog(LOG_CRIT, "Cannot allocate memory for message from unix socket.\n"); + } else { + pload->pmsg = strdup(buf); + if(pload->pmsg) { + pload->scn = s2; + if((n = zst_queue_add(gctx->uqueue, pload, USR_MSG))) { + free(pload->pmsg); + free(pload); + close(s2); + } + } + } + done = 1; + } + } while (!done); + + memset(buf, 0, sizeof(char)*4096); + } + + return NULL; +} + +static void __print_active_object_from_storage(FILE *out, + dsb_secstore_t *storage) +{ + usrtc_t *stree = &(storage->curr_data); + usrtc_node_t *node = NULL; + dsb_secinfo_t *info = NULL; + char *uus; + + pthread_rwlock_rdlock(&(storage->srwlock)); + + if(!(node = usrtc_first(stree))) { + fprintf(out, "(No data).\n"); + goto __unlock; + } + + for(node = usrtc_first(stree); ; + node = usrtc_next(stree, node)) { + info = (dsb_secinfo_t *)usrtc_node_getdata(node); + + pthread_mutex_lock(&info->slock); + + if(!(info->flags & DSB_GARBAGED)) { + uus = uuid2str(info->blk_uuid); + fprintf(out, "%lu: @%s inum: %lu name: '%s'\n", info->hash, + uus ? uus : "nil", info->inode_num, + info->obj_name); + if(uus) free_uuidstr(uus); + } + + pthread_mutex_unlock(&info->slock); + if(node == usrtc_last(stree)) break; + } + + __unlock: + pthread_rwlock_unlock(&(storage->srwlock)); + + return; +} + +static void __print_object_entries(FILE *out, dsb_secstore_t *storage, + uint64_t hash) +{ + dsb_secinfo_t *info; + int r = 0; + char *uus; + + r = dsb_store_search(storage, hash, &info); + if(r) fprintf(out, "Object not found, or internal error occurs (%d).\n", r); + else { + pthread_mutex_lock(&info->slock); + uus = uuid2str(info->blk_uuid); + fprintf(out, "%lu: @%s inum: %lu name: '%s'\n", info->hash, + uus ? uus : "nil", info->inode_num, + info->obj_name); + if(uus) free_uuidstr(uus); + + fprintf(out, "UID List (active):\n"); + + for(r = 0; r < __MXRLE; r++) { + if(info->aclist.uidlist[r].mask & DSBMASK_SET) { + fprintf(out, "\t n: %d UID: %d Mode: ", r, info->aclist.uidlist[r].uid); + /* human output */ + if(info->aclist.uidlist[r].mask & DSBMASK_READ) fprintf(out, "r"); + else fprintf(out, "-"); + if(info->aclist.uidlist[r].mask & DSBMASK_WRITE) fprintf(out, "w"); + else fprintf(out, "-"); + if(info->aclist.uidlist[r].mask & DSBMASK_EXEC) fprintf(out, "x"); + else fprintf(out, "-"); + fprintf(out, "\n"); + } + } + + fprintf(out, "\n"); + + fprintf(out, "GID List (active):\n"); + for(r = 0; r < __MXRLE; r++) { + if(info->aclist.gidlist[r].mask & DSBMASK_SET) { + fprintf(out, "\t n: %d GID: %d Mode: ", r, info->aclist.gidlist[r].gid); + /* human output */ + if(info->aclist.gidlist[r].mask & DSBMASK_READ) fprintf(out, "r"); + else fprintf(out, "-"); + if(info->aclist.gidlist[r].mask & DSBMASK_WRITE) fprintf(out, "w"); + else fprintf(out, "-"); + if(info->aclist.gidlist[r].mask & DSBMASK_EXEC) fprintf(out, "x"); + else fprintf(out, "-"); + fprintf(out, "\n"); + } + } + + fprintf(out, "\n"); + + fprintf(out, "Mode for others: "); + if(info->aclist.othmask & DSBMASK_SET) { + /* human output */ + if(info->aclist.othmask & DSBMASK_READ) fprintf(out, "r"); + else fprintf(out, "-"); + if(info->aclist.othmask & DSBMASK_WRITE) fprintf(out, "w"); + else fprintf(out, "-"); + if(info->aclist.othmask & DSBMASK_EXEC) fprintf(out, "x"); + else fprintf(out, "-"); + fprintf(out, "\n\n"); + } else fprintf(out, "Not set.\n\n"); + + pthread_mutex_unlock(&info->slock); + } + + return; +} + +static void __add_object_storage(FILE *out, dsb_secstore_t *storage, char *name, + uint64_t inum, uint8_t blkid[16]) +{ + dsb_secinfo_t *info = malloc(sizeof(dsb_secinfo_t)); + char str[512], *uc = NULL; + struct dsbnl_policy_msg dsbmsg; + int r = 0; + + if(!info) fprintf(out, "Not enough memory.\n"); + + r = dsb_store_info_allocinit(info); + if(r) fprintf(out, "Something goes wrong with %d\n", r); + + /* init */ + strncpy(info->obj_name, name, 256); + memcpy(info->blk_uuid, blkid, sizeof(uint8_t)*16); + info->inode_num = inum; + + /* ok, take a deal with a hash: + * it's forms from the following: + * uuid-inode_num-name + */ + uc = uuid2str(blkid); + snprintf(str, 512, "%s-%lu", uc ? uc : "nil", inum); + free_uuidstr(uc); + + info->hash = (uint64_t)djb2_hash((unsigned char *)str); + + r = dsb_store_insert(storage, info); + + if(r) fprintf(out, "Something goes wrong with %d\n", r); + else { + /* form a message for kernel */ + memset(&dsbmsg, 0, sizeof(struct dsbnl_policy_msg)); + dsbmsg.cmd = DSBNL_CMDADDOBJ; + dsbmsg.hash = info->hash; + r = netlink_senddsbmsg(storage, &dsbmsg); + fprintf(out, "(%d)DONE.\n", r); + } + + return; +} + +static void __remove_object_storage(FILE *out, dsb_secstore_t *storage, + uint64_t hash) +{ + int r = dsb_store_remove(storage, hash); + struct dsbnl_policy_msg dsbmsg; + + if(r) fprintf(out, "Something goes wrong with %d\n", r); + else { + /* form a message for kernel */ + memset(&dsbmsg, 0, sizeof(struct dsbnl_policy_msg)); + dsbmsg.cmd = DSBNL_CMDREMOVEOBJ; + dsbmsg.hash = hash; + r = netlink_senddsbmsg(storage, &dsbmsg); + fprintf(out, "(%d)DONE.\n", r); + } + + return; +} + +static void __setrule_object(FILE *out, dsb_secstore_t *storage, uint64_t hash, + int n, uint32_t id, int rid, uint8_t mask) +{ + dsb_secinfo_t *info; + dsb_acl_entry_t *list; + struct dsbnl_policy_msg dsbmsg; + int r = 0; + + if(n >= __MXRLE || n < 0) { + __einval: + fprintf(out, "INVALID(EINVAL)\n"); + return; + } + + r = dsb_store_search(storage, hash, &info); + if(r) fprintf(out, "Object not found, or internal error occurs (%d).\n", r); + else { + pthread_mutex_lock(&info->slock); + switch(rid) { + case DSBRID_UID: list = info->aclist.uidlist; break; + case DSBRID_GID: list = info->aclist.gidlist; break; + case DSBRID_OTHER: + info->aclist.othmask = mask; + info->aclist.othmask |= DSBMASK_SET; + pthread_mutex_unlock(&info->slock); + goto __sendmsg; + break; + } + if(!list) goto __einval; + list[n].uid = id; + list[n].mask = mask; + list[n].mask |= DSBMASK_SET; + pthread_mutex_unlock(&info->slock); + + __sendmsg: + /* now we need to call the dsb within kernel */ + memset(&dsbmsg, 0, sizeof(struct dsbnl_policy_msg)); + dsbmsg.cmd = DSBNL_CMDSETLISTENTRY; + dsbmsg.hash = info->hash; + dsbmsg.listno = n; + switch(rid) { + case DSBRID_UID: + dsbmsg.uid = id; + break; + case DSBRID_GID: + dsbmsg.gid = id; + break; + } + dsbmsg.flags = rid; + dsbmsg.cap = mask; + + r = netlink_senddsbmsg(storage, &dsbmsg); + fprintf(out, "(%d)DONE.\n", r); + } + + return; +} + +static void __cleanrule_object(FILE *out, dsb_secstore_t *storage, uint64_t hash, + int n, int rid) +{ + dsb_secinfo_t *info; + dsb_acl_entry_t *list; + struct dsbnl_policy_msg dsbmsg; + int r = 0; + + if(n >= __MXRLE || n < 0) { + __einval: + fprintf(out, "INVALID(EINVAL)\n"); + return; + } + + r = dsb_store_search(storage, hash, &info); + if(r) fprintf(out, "Object not found, or internal error occurs (%d).\n", r); + else { + pthread_mutex_lock(&info->slock); + switch(rid) { + case DSBRID_UID: list = info->aclist.uidlist; break; + case DSBRID_GID: list = info->aclist.gidlist; break; + case DSBRID_OTHER: + info->aclist.othmask = 0; + pthread_mutex_unlock(&info->slock); + goto __sendmsg; + break; + } + if(!list) goto __einval; + list[n].uid = 0; + list[n].mask = 0; + pthread_mutex_unlock(&info->slock); + + __sendmsg: + /* now we need to call the dsb within kernel */ + memset(&dsbmsg, 0, sizeof(struct dsbnl_policy_msg)); + dsbmsg.cmd = DSBNL_CMDCLEANLISTENTRY; + dsbmsg.hash = info->hash; + dsbmsg.listno = n; + dsbmsg.flags = rid; + + r = netlink_senddsbmsg(storage, &dsbmsg); + fprintf(out, "(%d)DONE.\n", r); + } + + return; +} + +static void __usercap_set(FILE *out, dsb_secstore_t *storage, uid_t uid, uint8_t n) +{ + struct dsbnl_policy_msg dsbmsg; + int r = 0; + + memset(&dsbmsg, 0, sizeof(struct dsbnl_policy_msg)); + dsbmsg.cmd = DSBNL_CMDUIDCAPADD; + dsbmsg.uid = uid; + dsbmsg.listno = n; + r = netlink_senddsbmsg(storage, &dsbmsg); + fprintf(out, "(%d)DONE.\n", r); + + return; +} + +static void __usercap_change(FILE *out, dsb_secstore_t *storage, uid_t uid, uint8_t n) +{ + struct dsbnl_policy_msg dsbmsg; + int r = 0; + + memset(&dsbmsg, 0, sizeof(struct dsbnl_policy_msg)); + dsbmsg.cmd = DSBNL_CMDUIDCAPCHANGE; + dsbmsg.uid = uid; + dsbmsg.listno = n; + r = netlink_senddsbmsg(storage, &dsbmsg); + fprintf(out, "(%d)DONE.\n", r); + + return; +} + +static void __usercap_remove(FILE *out, dsb_secstore_t *storage, uid_t uid) +{ + struct dsbnl_policy_msg dsbmsg; + int r = 0; + + memset(&dsbmsg, 0, sizeof(struct dsbnl_policy_msg)); + dsbmsg.cmd = DSBNL_CMDUIDCAPREMOVE; + dsbmsg.uid = uid; + r = netlink_senddsbmsg(storage, &dsbmsg); + fprintf(out, "(%d)DONE.\n", r); + + return; +} + +/* + * ok, here the best place to describe S-expression used for control all + * the stuff. + * 1. Listing - show the list of already configured object permissions + * '(list-all)' - will reply with all objects + * '(list )' - will show full information about object permissions + * 2. Adding objects to the list + * '(object-add (:blkid <128bit identifier>)(:inode <64bit long>)(:name ""))' + * 3. Removing objects from the list + * '(object-remove )' + * 4. Edit rules of the object + * (object-entry-set-uid (:n 0)(:id 1000)(:mode rwx)) + * (object-entry-set-gid (:n 0)(:id 1000)(:mode rwx)) + * (object-entry-set-other (:mode rwx)) + * or, in case of entry clear + * '(object-entry-clean-uid (:n 0))' + * '(object-entry-clean-gid (:n 0))' + * '(object-entry-clean-other )' + */ +static int __process_msg(FILE *out, char *msg, struct dsbd_ctx *gctx) +{ + /* ok, S-expressions again */ + sexp_t *sx = NULL, *isx, *iisx; + dsb_secstore_t *storage = gctx->storage; + uint64_t hash = 0; + uint64_t inum; + uint8_t blkid[16], mask; + char *name, *fu_name, *val_name; + uid_t uid; + int idx, iidx, i, n, rid; + char _des[5]; + + if(!msg || !strlen(msg)) return 0; + + if(!(sx = parse_sexp(msg, strlen(msg)))) return 0; + + if(sx->ty == SEXP_LIST) + fu_name = sx->list->val; + else goto __fini; + + if(!fu_name || !strlen(fu_name)) goto __fini; + + /* now we're ready to call function */ + if(!strcmp(fu_name, "list-all")) { /* no parse at all */ + __print_active_object_from_storage(out, storage); + } else if(!strcmp(fu_name, "list")) { /* need to take a hash */ + SEXP_ITERATE_LIST(sx, isx, idx) { + if(isx->ty == SEXP_LIST) goto __fini; + if(idx == 1) hash = strtoul(isx->val, NULL, 0); + } + + __print_object_entries(out, storage, hash); + } else if(!strcmp(fu_name, "object-add")) { + name = NULL; inum = 0; + SEXP_ITERATE_LIST(sx, isx, idx) { + if(idx && isx->ty != SEXP_LIST) goto __fini; /* skip */ + + if(idx) { + SEXP_ITERATE_LIST(isx, iisx, iidx) { + if(iisx->ty == SEXP_LIST) goto __fini; /* skip */ + + switch(iidx) { + case 0: val_name = iisx->val; break; + case 1: name = iisx->val; break; + default: goto __fini; break; + } + } + + if(!strcmp(val_name, ":blkid")) { + memset(blkid, 0, sizeof(uint8_t)*16); + + /* convert it to normal base */ + for(iidx = 0, i = 0; name[iidx] != '\0'; i++, iidx += 2) { + if(i > 15) goto __fini; + memset(_des, 0, 5); + snprintf(_des, 5, "0x%c%c", name[iidx], name[iidx + 1]); + blkid[i] = strtoul(_des, NULL, 0); + } + } else if(!strcmp(val_name, ":inode")) inum = strtoul(name, NULL, 10); + else if(!strcmp(val_name, ":name")) name = name; /* nothing to do */ + else goto __fini; + } + } + + if(!name || !inum) goto __fini; + + __add_object_storage(out, storage, name, inum, blkid); + } else if(!strcmp(fu_name, "object-remove")) { + hash = 0; + SEXP_ITERATE_LIST(sx, isx, idx) { + if(isx->ty == SEXP_LIST) goto __fini; + if(idx == 1) hash = strtoul(isx->val, NULL, 0); + } + + if(!hash) goto __fini; + __remove_object_storage(out, storage, hash); + } else if(!strcmp(fu_name, "object-entry-set-uid") || !strcmp(fu_name, "object-entry-set-gid")) { + /* rid */ + if(!strcmp(fu_name, "object-entry-set-uid")) rid = DSBRID_UID; + else rid = DSBRID_GID; + + hash = 0; n = 0; mask = 0; + SEXP_ITERATE_LIST(sx, isx, idx) { + if(idx < 2 && isx->ty == SEXP_LIST) goto __fini; + if(idx > 1 && isx->ty != SEXP_LIST) goto __fini; + + switch(idx) { + case 0: break; /* check here ? */ + case 1: hash = strtoul(isx->val, NULL, 0); break; + case 2: + case 3: + case 4: + case 5: + name = NULL; + SEXP_ITERATE_LIST(isx, iisx, iidx) { + if(iisx->ty == SEXP_LIST) goto __fini; /* skip */ + + switch(iidx) { + case 0: val_name = iisx->val; break; + case 1: name = iisx->val; break; + default: goto __fini; break; + } + } + + if(!name) goto __fini; + + /* take care about what we got */ + if(!strcmp(val_name, ":n")) n = atoi(name); + else if(!strcmp(val_name, ":mode")) { + mask = 0; + if(strlen(name) != 3) goto __fini; + + for(i = 0; i < 3; i++) if(name[i] != '-') mask |= (1 << (i + 1)); + } else if(!strcmp(val_name, ":id")) uid = atoi(name); + else goto __fini; + + break; + default: goto __fini; + } + } + + if(!hash) goto __fini; + + __setrule_object(out, storage, hash, n, uid, rid, mask); + } else if(!strcmp(fu_name, "object-entry-set-other")) { + rid = DSBRID_OTHER; + hash = 0; mask = 0; + SEXP_ITERATE_LIST(sx, isx, idx) { + if(idx < 2 && isx->ty == SEXP_LIST) goto __fini; + if(idx > 1 && isx->ty != SEXP_LIST) goto __fini; + + switch(idx) { + case 0: break; /* check here ? */ + case 1: hash = strtoul(isx->val, NULL, 0); break; + case 2: + case 3: + name = NULL; + SEXP_ITERATE_LIST(isx, iisx, iidx) { + if(iisx->ty == SEXP_LIST) goto __fini; /* skip */ + + switch(iidx) { + case 0: val_name = iisx->val; break; + case 1: name = iisx->val; break; + default: goto __fini; break; + } + } + + if(!name) goto __fini; + + /* take care about what we got */ + if(!strcmp(val_name, ":mode")) { + mask = 0; + if(strlen(name) != 3) goto __fini; + + for(i = 0; i < 3; i++) if(name[i] != '-') mask |= (1 << (i + 1)); + } else goto __fini; + + break; + default: goto __fini; + } + } + + if(!hash) goto __fini; + + __setrule_object(out, storage, hash, 0, 0, rid, mask); + } else if(!strcmp(fu_name, "object-entry-clean-uid") || !strcmp(fu_name, "object-entry-clean-gid")) { + /* rid */ + if(!strcmp(fu_name, "object-entry-clean-uid")) rid = DSBRID_UID; + else rid = DSBRID_GID; + hash = 0; n = 0; + + SEXP_ITERATE_LIST(sx, isx, idx) { + if(idx < 2 && isx->ty == SEXP_LIST) goto __fini; + if(idx > 1 && isx->ty != SEXP_LIST) goto __fini; + + switch(idx) { + case 0: break; /* check here ? */ + case 1: hash = strtoul(isx->val, NULL, 0); break; + case 2: + SEXP_ITERATE_LIST(isx, iisx, iidx) { + if(iisx->ty == SEXP_LIST) goto __fini; /* skip */ + + switch(iidx) { + case 0: val_name = iisx->val; break; + case 1: name = iisx->val; break; + default: goto __fini; break; + } + } + + /* take care about what we got */ + if(!strcmp(val_name, ":n")) n = atoi(name); + else goto __fini; + + break; + default: goto __fini; + } + } + + if(!hash) goto __fini; + + __cleanrule_object(out, storage, hash, n, rid); + } else if(!strcmp(fu_name, "object-entry-clean-other")) { + rid = DSBRID_OTHER; + hash = 0; + SEXP_ITERATE_LIST(sx, isx, idx) { + if(idx < 2 && isx->ty == SEXP_LIST) goto __fini; + if(idx > 1 && isx->ty != SEXP_LIST) goto __fini; + + switch(idx) { + case 0: break; /* check here ? */ + case 1: hash = strtoul(isx->val, NULL, 0); break; + default: goto __fini; + } + } + + if(!hash) goto __fini; + + __cleanrule_object(out, storage, hash, 0, rid); + } else if(!strcmp(fu_name, "user-cap-set") || + !strcmp(fu_name, "user-cap-change")) { /* (user-cap-set|change (:uid ) (:mask )) */ + SEXP_ITERATE_LIST(sx, isx, idx) { + if(idx && isx->ty != SEXP_LIST) goto __fini; + + if(idx) { + SEXP_ITERATE_LIST(isx, iisx, iidx) { + if(iisx->ty == SEXP_LIST) goto __fini; /* skip */ + switch(iidx) { + case 0: val_name = iisx->val; break; + case 1: name = iisx->val; break; + default: goto __fini; break; + } + } + if(!strcmp(val_name, ":uid")) uid = atoi(name); + else if(!strcmp(val_name, ":mask")) n = atoi(name); + else goto __fini; + } + + } + + if(!strcmp(fu_name, "user-cap-set")) __usercap_set(out, storage, uid, n); + else __usercap_change(out, storage, uid, n); + } else if(!strcmp(fu_name, "user-cap-remove")) { /* (user-cap-set (:uid )) */ + SEXP_ITERATE_LIST(sx, isx, idx) { + if(idx && isx->ty != SEXP_LIST) goto __fini; + + if(idx) { + SEXP_ITERATE_LIST(isx, iisx, iidx) { + if(iisx->ty == SEXP_LIST) goto __fini; /* skip */ + switch(iidx) { + case 0: val_name = iisx->val; break; + case 1: name = iisx->val; break; + default: goto __fini; break; + } + } + if(!strcmp(val_name, ":uid")) uid = atoi(name); + else goto __fini; + } + + } + + __usercap_remove(out, storage, uid); + } else goto __fini; + + __fini: + destroy_sexp(sx); + + return 0; +} + +static void *__ctrl_thread(void *arg) +{ + struct dsbd_ctx *gctx = (struct dsbd_ctx *)arg; + struct _payload *pload; + zst_msg_t msg; + FILE *wstream = NULL; + + while(1) { + if(zst_queue_get(gctx->uqueue, NULL, &msg)) break; + + if(msg.msgtype != USR_MSG) continue; + else pload = (struct _payload *)msg.data; + + wstream = fdopen(pload->scn, "r+"); + if(!wstream) { + printf("errno = %s\n", strerror(errno)); + close(pload->scn); + goto __fini_msg; + } + + __process_msg(wstream, pload->pmsg, gctx); + + fflush(wstream); + fclose(wstream); + + __fini_msg: + /* finish up the message */ + //free(pload->pmsg); + //free(pload); + wstream = NULL; + } + + return NULL; +} + +/* peeeeeee + * have a nice days until systemd isn't goes deep + */ +int main(int argc, char **argv) +{ + int c, r = 0, fp = 0; + struct dsbd_ctx *gctx = malloc(sizeof(struct dsbd_ctx)); + dsb_secstore_t *storage = malloc(sizeof(dsb_secstore_t)); + zst_queue_t *queue = malloc(sizeof(zst_queue_t)); + pthread_t unixsck_thread, cmds_thread; + + if(!queue) return -ENOMEM; + if(!gctx || !storage) return -ENOMEM; + else { /* initial */ + memset(gctx, 0, sizeof(struct dsbd_ctx)); + + if((r = dsb_store_allocinit(storage))) goto __fails; + else gctx->storage = storage; + + if((r = zst_queue_init(queue))) goto __fails; + else gctx->uqueue = queue; + } + + /* this is time to parse parameters */ + while (1) { + static struct option long_options[] = { + /* These options a generic ones. */ + {"help", no_argument, NULL, 'h'}, /* print out help and version info */ + {"version", no_argument, NULL, 'v'}, /* just out a version info */ + /* The following options about system. */ + {"daemonize", no_argument, NULL, 'd'}, + {"systemd", no_argument, NULL, 's'}, + {"unix-socket-path", required_argument, NULL, 'u'}, + {"log-file-path", required_argument, NULL, 'l'}, + {NULL, 0, NULL, 0}, + }; + /* getopt_long stores the option index here. */ + int option_index = 0; + + if((c = getopt_long(argc, argv, "hvdsu:l:", long_options, + &option_index)) == -1) break; + + switch (c) { + case 'h': + __print_help(); + return 0; + break; + case 'v': + __print_version(); + return 0; + break; + case 'd': + gctx->flags |= DSBD_DAEMONIZE; + break; + case 's': + gctx->flags |= DSBD_SYSTEMSHIT; + break; + case 'u': + if(!(gctx->unixsck_path = strdup(optarg))) { r = -ENOMEM; goto __fails; } + fp++; + break; + case 'l': + if(!(gctx->log_file = strdup(optarg))) { r = -ENOMEM; goto __fails; } + fp++; + break; + case '?': + /* getopt_long already printed an error message. */ + break; + default: + abort(); + } + } + + if(fp < 2) { + fprintf(stderr, "FAIL: No file pathes provided, not enough options.\n"); + + __print_version(); + __print_help(); + return -EINVAL; + } + + if(gctx->flags & DSBD_DAEMONIZE) skeleton_daemon(); + + /* ok now we're ready to do the other initialization */ + dsb_sectore_setinitdac(gctx->storage, store_initdac); + dsb_sectore_setinitbe(gctx->storage, store_initbe); + dsb_sectore_setpushdac(gctx->storage, store_pushbe); + dsb_sectore_setpushbe(gctx->storage, store_pushdac); + + r = dsb_store_init(gctx->storage, gctx, gctx); + if(r) goto __fails; + + /* firstly open unix socket to listen for cmds */ + /* + * NOTE: this part might be completely changed for more + * appropriate way to make it so. + * my suggestion to use special secure local bus, no no no + * no dbus, just something lightweight and secure. Proposal required. + */ + if(pthread_create(&unixsck_thread, NULL, __unixsocket_thread, (void *)gctx)) { + syslog(LOG_CRIT, "Failed to create a special unix socket listening thread.\n"); + return -ENOMEM; + } + if(pthread_create(&cmds_thread, NULL, __ctrl_thread, (void *)gctx)) { + syslog(LOG_CRIT, "Failed to create a special unix socket command thread.\n"); + return -ENOMEM; + } + + /* main thread will works with netlink */ + int infd = scknl_openevents(); + if(infd < 0) { + for(;;) { + sleep(10000); + } + } else { + events_loop(stderr, gctx, infd); + } + + pthread_cancel(unixsck_thread); + pthread_cancel(cmds_thread); + + return 0; + + __fails: + free(gctx); + free(storage); + + return -r; +} diff --git a/daemon/dsbus/daemon/netlink.c b/daemon/dsbus/daemon/netlink.c new file mode 100644 index 0000000..126fef6 --- /dev/null +++ b/daemon/dsbus/daemon/netlink.c @@ -0,0 +1,114 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */ +/* + * Originally written by Alexander Vdolainen + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define MAX_PAYLOAD 512 + +struct netlink_be { + int fd; +}; + +int store_initdac(dsb_secstore_t *storage, void *priv) +{ + struct netlink_be *be = malloc(sizeof(struct netlink_be)); + struct sockaddr_nl src_addr; + + if(!be) return ENOMEM; + else storage->dac_be = be; + + be->fd = socket(PF_NETLINK, SOCK_RAW, 31); + if(be->fd < 0) return errno; + + memset(&src_addr, 0, sizeof(src_addr)); + src_addr.nl_family = AF_NETLINK; + src_addr.nl_pid = getpid(); /* self pid */ + + bind(be->fd, (struct sockaddr*)&src_addr, sizeof(src_addr)); + + return 0; +} + +int scknl_openevents(void) +{ + int fd; + struct sockaddr_nl src_addr; + + fd = socket(PF_NETLINK, SOCK_RAW, 30); + if(fd < 0) return fd; + + memset(&src_addr, 0, sizeof(src_addr)); + src_addr.nl_family = AF_NETLINK; + src_addr.nl_pid = getpid(); /* self pid */ + + bind(fd, (struct sockaddr*)&src_addr, sizeof(src_addr)); + + return fd; +} + +int netlink_senddsbmsg(dsb_secstore_t *storage, struct dsbnl_policy_msg *dsbmsg) +{ + struct netlink_be *be = storage->dac_be; + struct sockaddr_nl dest_addr; + struct nlmsghdr *nlh = NULL; + struct msghdr msg; + struct iovec iov; + int r = 0; + + /* set destination address */ + memset(&dest_addr, 0, sizeof(dest_addr)); + dest_addr.nl_family = AF_NETLINK; + dest_addr.nl_pid = 0; /* For Linux Kernel */ + dest_addr.nl_groups = 2; /* unicast */ + + nlh = (struct nlmsghdr *)malloc(NLMSG_SPACE(MAX_PAYLOAD)); + memset(nlh, 0, NLMSG_SPACE(MAX_PAYLOAD)); + nlh->nlmsg_len = NLMSG_SPACE(MAX_PAYLOAD); + nlh->nlmsg_pid = getpid(); + nlh->nlmsg_flags = 0; + + memcpy(NLMSG_DATA(nlh), dsbmsg, sizeof(struct dsbnl_policy_msg)); + + iov.iov_base = (void *)nlh; + iov.iov_len = nlh->nlmsg_len; + memset(&msg, 0, sizeof(msg)); + msg.msg_name = (void *)&dest_addr; + msg.msg_namelen = sizeof(dest_addr); + msg.msg_iov = &iov; + msg.msg_iovlen = 1; + + r = sendmsg(be->fd, &msg, 0); + if(r < 0) { + printf("go: %s\n", strerror(errno)); + return errno; + } + + return 0; +} + +int store_pushdac(dsb_secstore_t *storage, dsb_secinfo_t *info) +{ + /* still dummy */ + return 0; +} + diff --git a/daemon/dsbus/daemon/storage.c b/daemon/dsbus/daemon/storage.c new file mode 100644 index 0000000..6afab6e --- /dev/null +++ b/daemon/dsbus/daemon/storage.c @@ -0,0 +1,232 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */ +/* + * Originally written by Alexander Vdolainen + */ + +#include +#include +#include + +static long __cmpuint64(const void *a, const void *b); + +int dsb_store_allocinit(dsb_secstore_t *storage) +{ + if(!storage) return EINVAL; + else memset(storage, 0, sizeof(dsb_secstore_t)); + + if(pthread_rwlock_init(&(storage->srwlock), NULL)) return ENOMEM; + + usrtc_init(&(storage->curr_data), USRTC_SPLAY, MAX_CTRLED_OBJECTS, + __cmpuint64); + usrtc_init(&(storage->garbaged_data), USRTC_SPLAY, MAX_CTRLED_OBJECTS, + __cmpuint64); + + return 0; +} + +int dsb_store_init(dsb_secstore_t *storage, void *beptr, void *dacptr) +{ + int r = 0; + if(!storage->store_initbe || !storage->store_initdac) return EINVAL; + + if((r = storage->store_initbe(storage, beptr))) return r; + if((r = storage->store_initdac(storage, dacptr))) return r; + + return r; +} + +int dsb_store_flush(dsb_secstore_t *storage) +{ + usrtc_t *stree = &(storage->curr_data); + usrtc_node_t *node = NULL; + dsb_secinfo_t *info = NULL; + int r = 0; + + /* globally lock it */ + pthread_rwlock_wrlock(&(storage->srwlock)); + + for(node = usrtc_first(stree); node != usrtc_last(stree); + node = usrtc_next(stree, node)) { + info = (dsb_secinfo_t *)usrtc_node_getdata(node); + + pthread_mutex_lock(&info->slock); + if((info->flags & DSB_DIRTY) && (info->flags & DSB_CONFIGURED)) { + r = dsb_sectore_pushbe(storage, info); + if(!r) r = dsb_sectore_pushdac(storage, info); + + /* clear flag */ + if(!r) info->flags &= ~DSB_DIRTY; + } + pthread_mutex_unlock(&info->slock); + + if(r) break; + } + + pthread_rwlock_unlock(&(storage->srwlock)); + + return r; +} + +int dsb_store_clean(dsb_secstore_t *storage) +{ + usrtc_t *stree = &(storage->garbaged_data); + dsb_secinfo_t *info = NULL; + usrtc_node_t *node = NULL; + int r = 0; + + /* globally lock it */ + pthread_rwlock_wrlock(&(storage->srwlock)); + for(node = usrtc_first(stree); node != NULL; + node = usrtc_first(stree)) { + info = (dsb_secinfo_t *)usrtc_node_getdata(node); + + usrtc_delete(stree, node); + if((r = dsb_store_info_destroy(info))) break; + } + + if(!r) { + stree = &(storage->curr_data); + + for(node = usrtc_first(stree); node != usrtc_last(stree); + node = usrtc_next(stree, node)) { + info = (dsb_secinfo_t *)usrtc_node_getdata(node); + + if((info->flags & DSB_GARBAGED) && (info->flags & DSB_CONFIGURED)) { + pthread_mutex_lock(&info->slock); + if((r = dsb_sectore_pushbe(storage, info))) goto __l_fail; + if((r = dsb_sectore_pushdac(storage, info))) goto __l_fail; + + /* move node to the garbage */ + usrtc_delete(stree, node); + usrtc_insert(&(storage->garbaged_data), node, &(info->hash)); + + __l_fail: + pthread_mutex_unlock(&info->slock); + if(r) break; + } + } + } + + pthread_rwlock_unlock(&(storage->srwlock)); + + return r; +} + +int dsb_store_insert(dsb_secstore_t *storage, dsb_secinfo_t *info) +{ + usrtc_t *stree = &(storage->curr_data); + usrtc_node_t *node = NULL; + int r = 0; + + if(!info) return EINVAL; + + /* check for duplicates */ + pthread_rwlock_rdlock(&(storage->srwlock)); + if(usrtc_count(stree) >= MAX_CTRLED_OBJECTS) r = EXFULL; + + node = usrtc_lookup(stree, &(info->hash)); + if(node) r = EEXIST; + pthread_rwlock_unlock(&(storage->srwlock)); + + if(r) return r; + else node = &(info->node); + + /* global lock */ + pthread_rwlock_wrlock(&(storage->srwlock)); + usrtc_insert(stree, node, &(info->hash)); + pthread_rwlock_unlock(&(storage->srwlock)); + + return 0; +} + +int dsb_store_remove(dsb_secstore_t *storage, uint64_t hash) +{ + usrtc_t *stree = &(storage->curr_data); + usrtc_node_t *node = NULL; + dsb_secinfo_t *info; + int r = 0; + + pthread_rwlock_rdlock(&(storage->srwlock)); + if(usrtc_count(stree) >= MAX_CTRLED_OBJECTS) r = EXFULL; + + node = usrtc_lookup(stree, &hash); + if(!node) r = ENOENT; + pthread_rwlock_unlock(&(storage->srwlock)); + + if(!r) { + info = (dsb_secinfo_t *)usrtc_node_getdata(node); + pthread_mutex_lock(&(info->slock)); + info->flags |= DSB_GARBAGED; + info->flags |= DSB_DIRTY; + pthread_mutex_unlock(&(info->slock)); + } + + return r; +} + +int dsb_store_search(dsb_secstore_t *storage, uint64_t hash, + dsb_secinfo_t **info) +{ + usrtc_t *stree = &(storage->curr_data); + usrtc_node_t *node = NULL; + int r = 0; + + pthread_rwlock_rdlock(&(storage->srwlock)); + node = usrtc_lookup(stree, &hash); + if(!node) r = ENOENT; + + pthread_rwlock_unlock(&(storage->srwlock)); + + if(!r) *info = (dsb_secinfo_t *)usrtc_node_getdata(node); + + return r; +} + +/* --- infos --- */ + +int dsb_store_info_allocinit(dsb_secinfo_t *info) +{ + if(!info) return EINVAL; + + memset(info, 0, sizeof(dsb_secinfo_t)); + + if(pthread_mutex_init(&(info->slock), NULL)) return ENOMEM; + + usrtc_node_init(&(info->node), (void *)info); + + return 0; +} + +int dsb_store_info_destroy(dsb_secinfo_t *info) +{ + if(!info) return EINVAL; + + pthread_mutex_destroy(&(info->slock)); + + return 0; +} + +struct storage_backend { + int fd; +}; + +int store_initbe(dsb_secstore_t *storage, void *priv) +{ + struct storage_backend *be = malloc(sizeof(struct storage_backend)); + + if(!be) return ENOMEM; + else storage->store_be = be; + + return 0; +} + +int store_pushbe(dsb_secstore_t *storage, dsb_secinfo_t *info) +{ + /* dummy */ + return 0; +} + +static long __cmpuint64(const void *a, const void *b) +{ + return *(uint64_t *)a - *(uint64_t *)b; +} diff --git a/daemon/dsbus/daemon/support.c b/daemon/dsbus/daemon/support.c new file mode 100644 index 0000000..2b37e04 --- /dev/null +++ b/daemon/dsbus/daemon/support.c @@ -0,0 +1,236 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */ +/* + * Originally written by Alexander Vdolainen + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +static long __cmp_uint(const void *a, const void *b) +{ + return (long)(*(unsigned int *)a - *(unsigned int *)b); +} + +static inline zst_msg_t *__get_newmsg(zst_queue_t *queue) +{ + usrtc_t *tree = &queue->msgcache; + usrtc_node_t *node; + zst_msg_t *tmp; + + if(usrtc_count(tree)) { + node = usrtc_first(tree); + tmp = (zst_msg_t *)usrtc_node_getdata(node); + usrtc_delete(tree, node); + } else { + tmp = malloc(sizeof(zst_msg_t)); + tree = &queue->qtree; + node = &tmp->node; + usrtc_node_init(node, tmp); + } + /* insert it */ + tree = &queue->qtree; + tmp->qlength = usrtc_count(tree); + usrtc_insert(tree, node, (void *)(&tmp->qlength)); + + return tmp; +} + +static inline void __release_msg(zst_queue_t *queue, zst_msg_t *msg) +{ + usrtc_node_t *node = &msg->node; + usrtc_t *tree = &queue->qtree; + + tree = &queue->qtree; /* remove from queue */ + usrtc_delete(tree, node); + + tree = &queue->msgcache; + + if(usrtc_count(tree) >= MAX_QUEUE_POOL) + free(msg); + else { + msg->data = NULL; + msg->msgtype = NIL_MSG; + usrtc_insert(tree, node, (void *)&msg->qlength); + } + + return; +} + +int zst_queue_init(zst_queue_t *queue) +{ + int r = 0; + + memset(queue, 0, sizeof(zst_queue_t)); + if((r = pthread_cond_init(&queue->cond, NULL))) + return r; + + if((r = pthread_mutex_init(&queue->mutex, NULL))) { + pthread_cond_destroy(&queue->cond); + return r; + } + + usrtc_init(&queue->qtree, USRTC_AVL, MAX_QUEUE_SIZE, __cmp_uint); + usrtc_init(&queue->msgcache, USRTC_AVL, MAX_QUEUE_POOL, __cmp_uint); + + return r; +} + +int zst_queue_add(zst_queue_t *queue, void *data, unsigned int msgtype) +{ + zst_msg_t *newmsg; + + pthread_mutex_lock(&queue->mutex); + newmsg = __get_newmsg(queue); + if (newmsg == NULL) { + pthread_mutex_unlock(&queue->mutex); + return ENOMEM; + } + + newmsg->data = data; + newmsg->msgtype = msgtype; + + if(queue->length == 0) + pthread_cond_broadcast(&queue->cond); + queue->length++; + pthread_mutex_unlock(&queue->mutex); + + return 0; +} + +int zst_queue_get(zst_queue_t *queue, const struct timespec *timeout, zst_msg_t *msg) +{ + usrtc_t *tree; + usrtc_node_t *node = NULL; + zst_msg_t *tmp; + int r = 0; + struct timespec abstimeout; + + if (queue == NULL || msg == NULL) + return EINVAL; + else + tree = &queue->qtree; + + if (timeout) { /* setup timeout */ + struct timeval now; + + gettimeofday(&now, NULL); + abstimeout.tv_sec = now.tv_sec + timeout->tv_sec; + abstimeout.tv_nsec = (now.tv_usec * 1000) + timeout->tv_nsec; + if (abstimeout.tv_nsec >= 1000000000) { + abstimeout.tv_sec++; + abstimeout.tv_nsec -= 1000000000; + } + } + + pthread_mutex_lock(&queue->mutex); + + /* Will wait until awakened by a signal or broadcast */ + while ((node = usrtc_first(tree)) == NULL && r != ETIMEDOUT) { /* Need to loop to handle spurious wakeups */ + if (timeout) + r = pthread_cond_timedwait(&queue->cond, &queue->mutex, &abstimeout); + else + pthread_cond_wait(&queue->cond, &queue->mutex); + } + if (r == ETIMEDOUT) { + pthread_mutex_unlock(&queue->mutex); + return r; + } + + tmp = (zst_msg_t *)usrtc_node_getdata(node); + queue->length--; + + msg->data = tmp->data; + msg->msgtype = tmp->msgtype; + msg->qlength = tmp->qlength; /* we will hold the msg id instead of size here */ + + __release_msg(queue, tmp); + pthread_mutex_unlock(&queue->mutex); + + return 0; +} + +int zst_queue_destroy(zst_queue_t *queue, int freedata, void (*free_msg)(void *)) +{ + int r = 0; + usrtc_t *tree = &queue->qtree; + usrtc_node_t *node = NULL; + zst_msg_t *msg; + + if (queue == NULL) return EINVAL; + + pthread_mutex_lock(&queue->mutex); + + for (node = usrtc_first(tree); node != NULL; node = usrtc_first(tree)) { + usrtc_delete(tree, node); + msg = (zst_msg_t *)usrtc_node_getdata(node); + + if(freedata) free(msg->data); + else if(free_msg) free_msg(msg->data); + + free(msg); + } + /* free cache */ + tree = &queue->msgcache; + for (node = usrtc_first(tree); node != NULL; node = usrtc_first(tree)) { + usrtc_delete(tree, node); + free(usrtc_node_getdata(node)); + } + + pthread_mutex_unlock(&queue->mutex); + r = pthread_mutex_destroy(&queue->mutex); + pthread_cond_destroy(&queue->cond); + + return r; +} + +unsigned int zst_queue_length(zst_queue_t *queue) +{ + unsigned int c; + + pthread_mutex_lock(&queue->mutex); + c = queue->length; + pthread_mutex_unlock(&queue->mutex); + + return c; +} + +unsigned long djb2_hash(unsigned char *str) +{ + unsigned long hash = 5381; + int c; + + while ((c = *str++)) + hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ + + return hash; +} + +char *uuid2str(uint8_t uuid[16]) +{ + char *str = malloc(sizeof(char)*64); + int i; + + if(!str) return NULL; + else memset(str, 0, sizeof(char)*64); + + for(i = 0; i < 16; i++) + snprintf(str + (2*i*sizeof(char)), 33, "%02x", uuid[i]); + + return str; +} + +void free_uuidstr(char *str) +{ + free(str); +} diff --git a/daemon/dsbus/include/dsbus/daemon.h b/daemon/dsbus/include/dsbus/daemon.h new file mode 100644 index 0000000..f31ba1b --- /dev/null +++ b/daemon/dsbus/include/dsbus/daemon.h @@ -0,0 +1,135 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */ +/* + * Originally written by Alexander Vdolainen + */ + +#ifndef __DSBUS_DAEMON_H__ +#define __DSBUS_DAEMON_H__ + +#include + +#define SYS_MSG 0x0f0affee +#define USR_MSG 0x0afeeffe +#define NIL_MSG 0x0 + +#define MAX_QUEUE_SIZE 4096 +#define MAX_QUEUE_POOL 256 + +#define MAX_BACKLOG_CONNECTIONS 8 + +#define DSBD_DAEMONIZE (1 << 1) +#define DSBD_SYSTEMSHIT (1 << 2) + +#define DSBNL_CMDADDOBJ 0xf +#define DSBNL_CMDREMOVEOBJ 0xc +#define DSBNL_CMDSETLISTENTRY 0xa +#define DSBNL_CMDCLEANLISTENTRY 0xb +#define DSBNL_CMDUIDCAPADD 0x5 +#define DSBNL_CMDUIDCAPREMOVE 0x7 +#define DSBNL_CMDUIDCAPCHANGE 0x8 + +#define DSBACT_READ 1 +#define DSBACT_WRITE 2 +#define DSBACT_EXEC 3 + +#define DSBMASK_READ (1 << DSBACT_READ) +#define DSBMASK_WRITE (1 << DSBACT_WRITE) +#define DSBMASK_EXEC (1 << DSBACT_EXEC) +#define DSBMASK_SET (1 << 4) + +#define DSBRID_UID 1 +#define DSBRID_GID 2 +#define DSBRID_OTHER 0 /* must be always zero */ +#define DSBRID_MAX 2 + +#define DSBNL_UIDRULE DSBRID_UID +#define DSBNL_GIDRULE DSBRID_GID +#define DSBNL_OTHERRULE DSBRID_OTHER + +struct dsbnl_policy_msg { + uint64_t hash; + uint32_t flags; + uint32_t uid; + uint32_t gid; + uint32_t cap; + uint8_t listno; + uint8_t cmd; +}; + +struct zst_queue_s; + +/* dsbusd context */ +struct dsbd_ctx { + dsb_secstore_t *storage; /* storage */ + char *config_file; /* from old proposal, not used */ + char *log_file; /* the same i.e. not actually used */ + char *unixsck_path; /* path to unix socket */ + struct zst_queue_s *uqueue; /* job queue */ + void *priv; /* added to make it more flexible */ + int flags; +}; + +struct _payload { + int scn; + char *pmsg; +}; + +typedef struct zst_msg_s { + void *data; /** < message payload */ + unsigned int msgtype; /** < message type ID */ + unsigned int qlength; /** < current queue length (actual on add moment), + * it makes no sense with few readers */ + usrtc_node_t node; +} zst_msg_t; + +typedef struct zst_queue_s { + unsigned int length; + /* sync */ + pthread_mutex_t mutex; + pthread_cond_t cond; + /* queue data */ + usrtc_t qtree; + /* cache */ + usrtc_t msgcache; +} zst_queue_t; + +/* This is actually internal API, it placed here just to avoid of one big + piece of C code */ +/* Init job queue */ +int zst_queue_init(zst_queue_t *queue); + +/* Add message to queue */ +int zst_queue_add(zst_queue_t *queue, void *data, unsigned int msgtype); + +/* Get a message from jon queue */ +int zst_queue_get(zst_queue_t *queue, const struct timespec *timeout, + zst_msg_t *msg); + +unsigned int zst_queue_length(zst_queue_t *queue); + +int zst_queue_destroy(zst_queue_t *queue, int freedata, + void (*free_msg)(void *)); + +/* this is a hash function to provide right hash from UUID and inode number */ +unsigned long djb2_hash(unsigned char *str); + +/* initialize storage backend */ +int store_initbe(dsb_secstore_t *storage, void *priv); + +/* initialize DSB link for storage */ +int store_initdac(dsb_secstore_t *storage, void *priv); + +int store_pushbe(dsb_secstore_t *storage, dsb_secinfo_t *info); + +int store_pushdac(dsb_secstore_t *storage, dsb_secinfo_t *info); + +/* convert uuid to string */ +char *uuid2str(uint8_t uuid[16]); + +/* free converted string from uuid */ +void free_uuidstr(char *str); + +/* send a message to netlink socket */ +int netlink_senddsbmsg(dsb_secstore_t *storage, struct dsbnl_policy_msg *dsbmsg); + +#endif /* __DSBUS_DAEMON_H__ */ diff --git a/daemon/dsbus/include/dsbus/data.h b/daemon/dsbus/include/dsbus/data.h new file mode 100644 index 0000000..69f65a4 --- /dev/null +++ b/daemon/dsbus/include/dsbus/data.h @@ -0,0 +1,87 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */ +/* + * Originally written by Alexander Vdolainen + */ + +#ifndef __DSBUS_DATA_H__ +#define __DSBUS_DATA_H__ + +#include +#include +#include +#include + +#define MAX_ACL_LIST_SIZE 32 +#define __MXRLE MAX_ACL_LIST_SIZE +#define MAX_CTRLED_OBJECTS 32768 + +#define DSB_AUDIT_EVENTS (1 << 1) +#define DSB_CONFIGURED (1 << 2) +#define DSB_GARBAGED (1 << 3) +#define DSB_DIRTY (1 << 4) + +#define DSBACC_ALLOWHARDLINK (1 << 12) + +typedef struct __object_access_list_entry_type { + union { + uid_t uid; + gid_t gid; + }; + uint8_t mask; +} dsb_acl_entry_t; + +typedef struct __object_access_list_type { + dsb_acl_entry_t uidlist[__MXRLE]; + dsb_acl_entry_t gidlist[__MXRLE]; + uint8_t othmask; +} dsb_acl_t; + +typedef struct __object_security_info_type { + dsb_acl_t aclist; + pthread_mutex_t slock; + usrtc_node_t node; + uint8_t flags; + uint8_t blk_uuid[16]; /* 128bit uuid for a volume stored */ + uint64_t inode_num; /* inode number */ + char obj_name[256]; + uint64_t hash; +} dsb_secinfo_t; + +typedef struct __object_security_store_type { + usrtc_t curr_data; + usrtc_t garbaged_data; + pthread_rwlock_t srwlock; + int (*store_initbe)(struct __object_security_store_type *, void *); + int (*store_initdac)(struct __object_security_store_type *, void *); + int (*store_pushbe)(struct __object_security_store_type *, dsb_secinfo_t *); + int (*store_pushdac)(struct __object_security_store_type *, dsb_secinfo_t *); + void *store_be; + void *dac_be; +} dsb_secstore_t; + +/* pointers */ +#define dsb_sectore_setstoreptr(a, b) (a)->store_be = (b) +#define dsb_sectore_setdacptr(a, b) (a)->dac_be = (b) +#define dsb_sectore_storeptr(a) (a)->store_be +#define dsb_sectore_dacptr(a) (a)->dac_be +/* functions */ +#define dsb_sectore_setinitdac(a, b) (a)->store_initdac = (b) +#define dsb_sectore_setinitbe(a, b) (a)->store_initbe = (b) +#define dsb_sectore_setpushdac(a, b) (a)->store_pushdac = (b) +#define dsb_sectore_setpushbe(a, b) (a)->store_pushbe = (b) +#define dsb_sectore_pushdac(a, b) (a)->store_pushdac((a), (b)) +#define dsb_sectore_pushbe(a, b) (a)->store_pushbe((a), (b)) + +/* a little bit of API */ +int dsb_store_allocinit(dsb_secstore_t *storage); +int dsb_store_init(dsb_secstore_t *storage, void *beptr, void *dacptr); +int dsb_store_flush(dsb_secstore_t *storage); +int dsb_store_clean(dsb_secstore_t *storage); +int dsb_store_insert(dsb_secstore_t *storage, dsb_secinfo_t *info); +int dsb_store_remove(dsb_secstore_t *storage, uint64_t hash); +int dsb_store_search(dsb_secstore_t *storage, uint64_t hash, dsb_secinfo_t **info); + +int dsb_store_info_allocinit(dsb_secinfo_t *info); +int dsb_store_info_destroy(dsb_secinfo_t *info); + +#endif /* __DSBUS_DATA_H__ */ diff --git a/daemon/dsbus/tools/Makefile.am b/daemon/dsbus/tools/Makefile.am new file mode 100644 index 0000000..bc32097 --- /dev/null +++ b/daemon/dsbus/tools/Makefile.am @@ -0,0 +1,16 @@ +## AUTOMAKE_OPTIONS = foreign + +AM_CPPFLAGS = \ + -DPACKAGE_LOCALE_DIR=\""$(localedir)"\" \ + -DPACKAGE_SRC_DIR=\""$(srcdir)"\" \ + -DPACKAGE_DATA_DIR=\""$(pkgdatadir)"\" \ + -DCNFPATH=\""$(prefix)/etc"\" \ + -I../include + +AM_CFLAGS = -Wall -g + +bin_PROGRAMS = dsbfcntl + +dsbfcntl_SOURCES = fcntl.c +dsbfcntl_LDADD = $(LIBTDATA_LIBS) $(LIBSEXPR_LIBS) -lblkid -lpthread + diff --git a/daemon/dsbus/tools/fcntl.c b/daemon/dsbus/tools/fcntl.c new file mode 100644 index 0000000..b305b3d --- /dev/null +++ b/daemon/dsbus/tools/fcntl.c @@ -0,0 +1,251 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */ +/* + * Originally written by Alexander Vdolainen + */ + +#define _GNU_SOURCE + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define TOOLMODE_CMD 1 +#define TOOLMODE_INFO 2 + +static void __print_version(void) +{ + fprintf(stdout, "DSB user space daemon control tool version: 0.1\n\n"); + fprintf(stdout, "Copyright (c) 2015-2016 Alexander Vdolainen.\nEmail: avdolainen@gmail.com\n\n"); + + return; +} + +static void __print_help(void) +{ + fprintf(stdout, "Usage: dsbfcntl [options]\nOptions:\n"); + fprintf(stdout, " --file-info(-i)\t Get file information required to set rules.\n"); + fprintf(stdout, " --control-command(-c) \"\"\t Command to send to the DSB userspace daemon.\n"); + fprintf(stdout, " --unix-socket-path(-u) \t Use as the unix socket name.\n"); + fprintf(stdout, " --help(-h)\t Print there help message\n"); + fprintf(stdout, " --version(-v)\t Print version information\n"); + fprintf(stdout, "\nFor further information check out provided documentation.\n"); + return; +} + +static int __print_fileinfo(const char *fpath) +{ + int r = 0; + struct stat buf; + FILE* fstab = NULL; + struct mntent *e; + char *devname = NULL; + char _fpath[4096]; + uint64_t inode_num = 0; + blkid_probe pr; + const char *uuid; + + r = stat(fpath, &buf); + if(r) { + fprintf(stderr, "FAILED: %s\n", strerror(r)); + return r; + } else inode_num = buf.st_ino; /* get inode number */ + + /* ok now we need to get full path if required */ + if(*fpath != '/') { + snprintf(_fpath, 4096, "%s/%s", get_current_dir_name(), fpath); + } else strcpy(_fpath, fpath); + + fprintf(stdout, "Full pathname: %s\n", _fpath); + + fstab = setmntent("/etc/mtab", "r"); + + /* e->mnt_dir is our hitler, mnt_fsname is a device */ + while ((e = getmntent(fstab))) { + if(strlen(_fpath) < strlen(e->mnt_dir)) { + continue; /* not so interesting */ + } else if(!strncmp(_fpath, e->mnt_dir, strlen(e->mnt_dir))) { + devname = strdup(e->mnt_fsname); + if(!devname) { r = ENOMEM; goto __fini; } + } + } + + fprintf(stdout, "Root device of the file is: %s\n", devname); + fprintf(stdout, "File object inode number is: %lu\n", inode_num); + + pr = blkid_new_probe_from_filename(devname); + if(!pr) { + r = EINVAL; + fprintf(stderr, "FAILED: %s\n", strerror(r)); goto __fini; + } + + blkid_do_probe(pr); + blkid_probe_lookup_value(pr, "UUID", &uuid, NULL); + + fprintf(stdout, "Root device UUID=%s\n", uuid); + + blkid_free_probe(pr); + + __fini: + endmntent(fstab); + if(devname) free(devname); + + return r; +} + +static int __execute_cmd(const char *unxsckpath, const char *ctrlcmd) +{ + int r = 0, c, s, len; + char *buf = malloc(4096); + struct sockaddr_un remote; + + if(!buf) return ENOMEM; + + if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { + r = errno; + goto __fini0; + } + + remote.sun_family = AF_UNIX; + strcpy(remote.sun_path, unxsckpath); + len = strlen(remote.sun_path) + sizeof(remote.sun_family); + if (connect(s, (struct sockaddr *)&remote, len) == -1) { + r = errno; + goto __fini; + } + + if(send(s, ctrlcmd, strlen(ctrlcmd), 0) == -1) { + r = errno; + goto __fini; + } + + while((c = recv(s, buf, 4096, 0)) != 0) { + if(c < 0) { + r = errno; + goto __fini; + } + fprintf(stdout, "%s", buf); + } + + __fini: + close(s); + __fini0: + free(buf); + + return r; +} + +int main(int argc, char **argv) +{ + int toolmode = 0, c, r = 0; + char *unxsckpath = NULL; + char *ctrlcmd = NULL; + char *fpath = NULL; + + while(1) { + static struct option long_options[] = { + /* These options a generic ones. */ + {"help", no_argument, NULL, 'h'}, /* print out help and version info */ + {"version", no_argument, NULL, 'v'}, /* just out a version info */ + /* The following options about system. */ + {"control-command", required_argument, NULL, 'c'}, + {"unix-socket-path", required_argument, NULL, 'u'}, + {"file-info", required_argument, NULL, 'i'}, + {NULL, 0, NULL, 0}, + }; + /* getopt_long stores the option index here. */ + int option_index = 0; + if((c = getopt_long(argc, argv, "hvc:u:i:", long_options, + &option_index)) == -1) break; + + switch (c) { + case 'h': + __print_help(); + return 0; + break; + case 'v': + __print_version(); + return 0; + break; + case 'c': + if(!toolmode || toolmode == TOOLMODE_CMD) toolmode = TOOLMODE_CMD; + else { + fprintf(stderr, "Illegal mode given.\n"); + r = -EINVAL; + goto __fails; + } + if(!(ctrlcmd = strdup(optarg))) { r = -ENOMEM; goto __fails; } + break; + case 'u': + if(!toolmode || toolmode == TOOLMODE_CMD) toolmode = TOOLMODE_CMD; + else { + fprintf(stderr, "Illegal mode given.\n"); + r = -EINVAL; + goto __fails; + } + if(!(unxsckpath = strdup(optarg))) { r = -ENOMEM; goto __fails; } + break; + case 'i': + if(!toolmode || toolmode == TOOLMODE_INFO) toolmode = TOOLMODE_INFO; + else { + fprintf(stderr, "Illegal mode given.\n"); + r = -EINVAL; + goto __fails; + } + if(!(fpath = strdup(optarg))) { r = -ENOMEM; goto __fails; } + break; + case '?': + /* getopt_long already printed an error message. */ + break; + default: + abort(); + } + + } + + /* run it */ + switch(toolmode) { + case TOOLMODE_CMD: + if(!unxsckpath) { + fprintf(stderr, "FAILED: Unix socket path doesn't pointed.\n"); + goto __einval; + } + if(!ctrlcmd) { + fprintf(stderr, "FAILED: Command is absent.\n"); + goto __einval; + } + r = __execute_cmd(unxsckpath, ctrlcmd); + break; + case TOOLMODE_INFO: + if(!fpath) { + fprintf(stderr, "FAILED: No input filename(s).\n"); + goto __einval; + } + r = __print_fileinfo(fpath); + break; + default: + fprintf(stderr, "FAILED: Incorrect options given.\n"); + __einval: + __print_version(); + __print_help(); + + return -EINVAL; + break; + } + + __fails: + if(unxsckpath) free(unxsckpath); + if(ctrlcmd) free(ctrlcmd); + if(fpath) free(fpath); + + return r; +} diff --git a/linux kernel patch/dsbv2.patch b/linux kernel patch/dsbv2.patch new file mode 100644 index 0000000..a4ba445 --- /dev/null +++ b/linux kernel patch/dsbv2.patch @@ -0,0 +1,7835 @@ +diff -Nru linux-3.18.25.orig/.config linux-3.18.25/.config +--- linux-3.18.25.orig/.config 1970-01-01 02:00:00.000000000 +0200 ++++ linux-3.18.25/.config 2016-01-21 03:38:09.000000000 +0200 +@@ -0,0 +1,6293 @@ ++# ++# Automatically generated file; DO NOT EDIT. ++# Linux/x86 3.18.25 Kernel Configuration ++# ++CONFIG_64BIT=y ++CONFIG_X86_64=y ++CONFIG_X86=y ++CONFIG_INSTRUCTION_DECODER=y ++CONFIG_PERF_EVENTS_INTEL_UNCORE=y ++CONFIG_OUTPUT_FORMAT="elf64-x86-64" ++CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig" ++CONFIG_LOCKDEP_SUPPORT=y ++CONFIG_STACKTRACE_SUPPORT=y ++CONFIG_HAVE_LATENCYTOP_SUPPORT=y ++CONFIG_MMU=y ++CONFIG_NEED_DMA_MAP_STATE=y ++CONFIG_NEED_SG_DMA_LENGTH=y ++CONFIG_GENERIC_ISA_DMA=y ++CONFIG_GENERIC_BUG=y ++CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y ++CONFIG_GENERIC_HWEIGHT=y ++CONFIG_ARCH_MAY_HAVE_PC_FDC=y ++CONFIG_RWSEM_XCHGADD_ALGORITHM=y ++CONFIG_GENERIC_CALIBRATE_DELAY=y ++CONFIG_ARCH_HAS_CPU_RELAX=y ++CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y ++CONFIG_HAVE_SETUP_PER_CPU_AREA=y ++CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y ++CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y ++CONFIG_ARCH_HIBERNATION_POSSIBLE=y ++CONFIG_ARCH_SUSPEND_POSSIBLE=y ++CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y ++CONFIG_ARCH_WANT_GENERAL_HUGETLB=y ++CONFIG_ZONE_DMA32=y ++CONFIG_AUDIT_ARCH=y ++CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y ++CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y ++CONFIG_HAVE_INTEL_TXT=y ++CONFIG_X86_64_SMP=y ++CONFIG_X86_HT=y ++CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-rdi -fcall-saved-rsi -fcall-saved-rdx -fcall-saved-rcx -fcall-saved-r8 -fcall-saved-r9 -fcall-saved-r10 -fcall-saved-r11" ++CONFIG_ARCH_SUPPORTS_UPROBES=y ++CONFIG_FIX_EARLYCON_MEM=y ++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" ++CONFIG_IRQ_WORK=y ++CONFIG_BUILDTIME_EXTABLE_SORT=y ++ ++# ++# General setup ++# ++CONFIG_INIT_ENV_ARG_LIMIT=32 ++CONFIG_CROSS_COMPILE="" ++# CONFIG_COMPILE_TEST is not set ++CONFIG_LOCALVERSION="" ++# CONFIG_LOCALVERSION_AUTO is not set ++CONFIG_HAVE_KERNEL_GZIP=y ++CONFIG_HAVE_KERNEL_BZIP2=y ++CONFIG_HAVE_KERNEL_LZMA=y ++CONFIG_HAVE_KERNEL_XZ=y ++CONFIG_HAVE_KERNEL_LZO=y ++CONFIG_HAVE_KERNEL_LZ4=y ++CONFIG_KERNEL_GZIP=y ++# CONFIG_KERNEL_BZIP2 is not set ++# CONFIG_KERNEL_LZMA is not set ++# CONFIG_KERNEL_XZ is not set ++# CONFIG_KERNEL_LZO is not set ++# CONFIG_KERNEL_LZ4 is not set ++CONFIG_DEFAULT_HOSTNAME="dlsec" ++CONFIG_SWAP=y ++CONFIG_SYSVIPC=y ++CONFIG_SYSVIPC_SYSCTL=y ++CONFIG_POSIX_MQUEUE=y ++CONFIG_POSIX_MQUEUE_SYSCTL=y ++CONFIG_CROSS_MEMORY_ATTACH=y ++CONFIG_FHANDLE=y ++CONFIG_USELIB=y ++CONFIG_AUDIT=y ++CONFIG_HAVE_ARCH_AUDITSYSCALL=y ++CONFIG_AUDITSYSCALL=y ++CONFIG_AUDIT_WATCH=y ++CONFIG_AUDIT_TREE=y ++ ++# ++# IRQ subsystem ++# ++CONFIG_GENERIC_IRQ_PROBE=y ++CONFIG_GENERIC_IRQ_SHOW=y ++CONFIG_GENERIC_IRQ_LEGACY_ALLOC_HWIRQ=y ++CONFIG_GENERIC_PENDING_IRQ=y ++CONFIG_GENERIC_IRQ_CHIP=y ++CONFIG_IRQ_DOMAIN=y ++# CONFIG_IRQ_DOMAIN_DEBUG is not set ++CONFIG_IRQ_FORCED_THREADING=y ++CONFIG_SPARSE_IRQ=y ++CONFIG_CLOCKSOURCE_WATCHDOG=y ++CONFIG_ARCH_CLOCKSOURCE_DATA=y ++CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y ++CONFIG_GENERIC_TIME_VSYSCALL=y ++CONFIG_GENERIC_CLOCKEVENTS=y ++CONFIG_GENERIC_CLOCKEVENTS_BUILD=y ++CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y ++CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y ++CONFIG_GENERIC_CMOS_UPDATE=y ++ ++# ++# Timers subsystem ++# ++CONFIG_TICK_ONESHOT=y ++CONFIG_NO_HZ_COMMON=y ++# CONFIG_HZ_PERIODIC is not set ++CONFIG_NO_HZ_IDLE=y ++# CONFIG_NO_HZ_FULL is not set ++CONFIG_NO_HZ=y ++CONFIG_HIGH_RES_TIMERS=y ++ ++# ++# CPU/Task time and stats accounting ++# ++CONFIG_TICK_CPU_ACCOUNTING=y ++# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set ++# CONFIG_IRQ_TIME_ACCOUNTING is not set ++CONFIG_BSD_PROCESS_ACCT=y ++CONFIG_BSD_PROCESS_ACCT_V3=y ++CONFIG_TASKSTATS=y ++CONFIG_TASK_DELAY_ACCT=y ++CONFIG_TASK_XACCT=y ++CONFIG_TASK_IO_ACCOUNTING=y ++ ++# ++# RCU Subsystem ++# ++CONFIG_TREE_RCU=y ++# CONFIG_PREEMPT_RCU is not set ++# CONFIG_TASKS_RCU is not set ++CONFIG_RCU_STALL_COMMON=y ++CONFIG_CONTEXT_TRACKING=y ++CONFIG_RCU_USER_QS=y ++# CONFIG_CONTEXT_TRACKING_FORCE is not set ++CONFIG_RCU_FANOUT=64 ++CONFIG_RCU_FANOUT_LEAF=16 ++# CONFIG_RCU_FANOUT_EXACT is not set ++CONFIG_RCU_FAST_NO_HZ=y ++# CONFIG_TREE_RCU_TRACE is not set ++CONFIG_RCU_NOCB_CPU=y ++# CONFIG_RCU_NOCB_CPU_NONE is not set ++# CONFIG_RCU_NOCB_CPU_ZERO is not set ++CONFIG_RCU_NOCB_CPU_ALL=y ++CONFIG_BUILD_BIN2C=y ++# CONFIG_IKCONFIG is not set ++CONFIG_LOG_BUF_SHIFT=18 ++CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 ++CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y ++CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y ++CONFIG_ARCH_SUPPORTS_INT128=y ++CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y ++CONFIG_NUMA_BALANCING=y ++CONFIG_CGROUPS=y ++# CONFIG_CGROUP_DEBUG is not set ++CONFIG_CGROUP_FREEZER=y ++CONFIG_CGROUP_DEVICE=y ++CONFIG_CPUSETS=y ++CONFIG_PROC_PID_CPUSET=y ++CONFIG_CGROUP_CPUACCT=y ++# CONFIG_RESOURCE_COUNTERS is not set ++CONFIG_CGROUP_PERF=y ++CONFIG_CGROUP_SCHED=y ++CONFIG_FAIR_GROUP_SCHED=y ++CONFIG_CFS_BANDWIDTH=y ++# CONFIG_RT_GROUP_SCHED is not set ++CONFIG_BLK_CGROUP=y ++# CONFIG_DEBUG_BLK_CGROUP is not set ++CONFIG_CHECKPOINT_RESTORE=y ++CONFIG_NAMESPACES=y ++CONFIG_UTS_NS=y ++CONFIG_IPC_NS=y ++CONFIG_USER_NS=y ++CONFIG_PID_NS=y ++CONFIG_NET_NS=y ++CONFIG_SCHED_AUTOGROUP=y ++# CONFIG_SYSFS_DEPRECATED is not set ++CONFIG_RELAY=y ++CONFIG_BLK_DEV_INITRD=y ++CONFIG_INITRAMFS_SOURCE="" ++CONFIG_RD_GZIP=y ++CONFIG_RD_BZIP2=y ++CONFIG_RD_LZMA=y ++CONFIG_RD_XZ=y ++CONFIG_RD_LZO=y ++CONFIG_RD_LZ4=y ++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set ++CONFIG_SYSCTL=y ++CONFIG_ANON_INODES=y ++CONFIG_HAVE_UID16=y ++CONFIG_SYSCTL_EXCEPTION_TRACE=y ++CONFIG_HAVE_PCSPKR_PLATFORM=y ++CONFIG_BPF=y ++CONFIG_EXPERT=y ++CONFIG_UID16=y ++CONFIG_SGETMASK_SYSCALL=y ++CONFIG_SYSFS_SYSCALL=y ++CONFIG_SYSCTL_SYSCALL=y ++CONFIG_KALLSYMS=y ++CONFIG_KALLSYMS_ALL=y ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_ELF_CORE=y ++CONFIG_PCSPKR_PLATFORM=y ++CONFIG_BASE_FULL=y ++CONFIG_FUTEX=y ++CONFIG_EPOLL=y ++CONFIG_SIGNALFD=y ++CONFIG_TIMERFD=y ++CONFIG_EVENTFD=y ++CONFIG_BPF_SYSCALL=y ++CONFIG_SHMEM=y ++CONFIG_AIO=y ++CONFIG_ADVISE_SYSCALLS=y ++CONFIG_PCI_QUIRKS=y ++# CONFIG_EMBEDDED is not set ++CONFIG_HAVE_PERF_EVENTS=y ++ ++# ++# Kernel Performance Events And Counters ++# ++CONFIG_PERF_EVENTS=y ++# CONFIG_DEBUG_PERF_USE_VMALLOC is not set ++CONFIG_VM_EVENT_COUNTERS=y ++# CONFIG_SLUB_DEBUG is not set ++# CONFIG_COMPAT_BRK is not set ++# CONFIG_SLAB is not set ++CONFIG_SLUB=y ++# CONFIG_SLOB is not set ++CONFIG_SLUB_CPU_PARTIAL=y ++CONFIG_SYSTEM_TRUSTED_KEYRING=y ++CONFIG_PROFILING=y ++CONFIG_OPROFILE=m ++# CONFIG_OPROFILE_EVENT_MULTIPLEX is not set ++CONFIG_HAVE_OPROFILE=y ++CONFIG_OPROFILE_NMI_TIMER=y ++CONFIG_KPROBES=y ++CONFIG_JUMP_LABEL=y ++CONFIG_OPTPROBES=y ++# CONFIG_UPROBES is not set ++# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set ++CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y ++CONFIG_ARCH_USE_BUILTIN_BSWAP=y ++CONFIG_KRETPROBES=y ++CONFIG_USER_RETURN_NOTIFIER=y ++CONFIG_HAVE_IOREMAP_PROT=y ++CONFIG_HAVE_KPROBES=y ++CONFIG_HAVE_KRETPROBES=y ++CONFIG_HAVE_OPTPROBES=y ++CONFIG_HAVE_KPROBES_ON_FTRACE=y ++CONFIG_HAVE_ARCH_TRACEHOOK=y ++CONFIG_HAVE_DMA_ATTRS=y ++CONFIG_HAVE_DMA_CONTIGUOUS=y ++CONFIG_GENERIC_SMP_IDLE_THREAD=y ++CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y ++CONFIG_HAVE_CLK=y ++CONFIG_HAVE_DMA_API_DEBUG=y ++CONFIG_HAVE_HW_BREAKPOINT=y ++CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y ++CONFIG_HAVE_USER_RETURN_NOTIFIER=y ++CONFIG_HAVE_PERF_EVENTS_NMI=y ++CONFIG_HAVE_PERF_REGS=y ++CONFIG_HAVE_PERF_USER_STACK_DUMP=y ++CONFIG_HAVE_ARCH_JUMP_LABEL=y ++CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y ++CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y ++CONFIG_HAVE_CMPXCHG_LOCAL=y ++CONFIG_HAVE_CMPXCHG_DOUBLE=y ++CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y ++CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y ++CONFIG_HAVE_ARCH_SECCOMP_FILTER=y ++CONFIG_SECCOMP_FILTER=y ++CONFIG_HAVE_CC_STACKPROTECTOR=y ++CONFIG_CC_STACKPROTECTOR=y ++# CONFIG_CC_STACKPROTECTOR_NONE is not set ++CONFIG_CC_STACKPROTECTOR_REGULAR=y ++# CONFIG_CC_STACKPROTECTOR_STRONG is not set ++CONFIG_HAVE_CONTEXT_TRACKING=y ++CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y ++CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y ++CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y ++CONFIG_HAVE_ARCH_SOFT_DIRTY=y ++CONFIG_MODULES_USE_ELF_RELA=y ++CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y ++CONFIG_OLD_SIGSUSPEND3=y ++CONFIG_COMPAT_OLD_SIGACTION=y ++ ++# ++# GCOV-based kernel profiling ++# ++# CONFIG_GCOV_KERNEL is not set ++# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set ++CONFIG_RT_MUTEXES=y ++CONFIG_BASE_SMALL=0 ++CONFIG_MODULES=y ++# CONFIG_MODULE_FORCE_LOAD is not set ++CONFIG_MODULE_UNLOAD=y ++# CONFIG_MODULE_FORCE_UNLOAD is not set ++CONFIG_MODVERSIONS=y ++CONFIG_MODULE_SRCVERSION_ALL=y ++CONFIG_MODULE_SIG=y ++# CONFIG_MODULE_SIG_FORCE is not set ++CONFIG_MODULE_SIG_ALL=y ++# CONFIG_MODULE_SIG_SHA1 is not set ++# CONFIG_MODULE_SIG_SHA224 is not set ++# CONFIG_MODULE_SIG_SHA256 is not set ++# CONFIG_MODULE_SIG_SHA384 is not set ++CONFIG_MODULE_SIG_SHA512=y ++CONFIG_MODULE_SIG_HASH="sha512" ++# CONFIG_MODULE_COMPRESS is not set ++CONFIG_STOP_MACHINE=y ++CONFIG_BLOCK=y ++CONFIG_BLK_DEV_BSG=y ++CONFIG_BLK_DEV_BSGLIB=y ++CONFIG_BLK_DEV_INTEGRITY=y ++CONFIG_BLK_DEV_THROTTLING=y ++CONFIG_BLK_CMDLINE_PARSER=y ++ ++# ++# Partition Types ++# ++CONFIG_PARTITION_ADVANCED=y ++CONFIG_ACORN_PARTITION=y ++CONFIG_ACORN_PARTITION_CUMANA=y ++CONFIG_ACORN_PARTITION_EESOX=y ++CONFIG_ACORN_PARTITION_ICS=y ++CONFIG_ACORN_PARTITION_ADFS=y ++CONFIG_ACORN_PARTITION_POWERTEC=y ++CONFIG_ACORN_PARTITION_RISCIX=y ++CONFIG_AIX_PARTITION=y ++CONFIG_OSF_PARTITION=y ++CONFIG_AMIGA_PARTITION=y ++CONFIG_ATARI_PARTITION=y ++CONFIG_MAC_PARTITION=y ++CONFIG_MSDOS_PARTITION=y ++CONFIG_BSD_DISKLABEL=y ++CONFIG_MINIX_SUBPARTITION=y ++CONFIG_SOLARIS_X86_PARTITION=y ++CONFIG_UNIXWARE_DISKLABEL=y ++CONFIG_LDM_PARTITION=y ++# CONFIG_LDM_DEBUG is not set ++CONFIG_SGI_PARTITION=y ++CONFIG_ULTRIX_PARTITION=y ++CONFIG_SUN_PARTITION=y ++CONFIG_KARMA_PARTITION=y ++CONFIG_EFI_PARTITION=y ++CONFIG_SYSV68_PARTITION=y ++CONFIG_CMDLINE_PARTITION=y ++CONFIG_BLOCK_COMPAT=y ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++CONFIG_IOSCHED_DEADLINE=y ++CONFIG_IOSCHED_CFQ=y ++CONFIG_CFQ_GROUP_IOSCHED=y ++CONFIG_DEFAULT_DEADLINE=y ++# CONFIG_DEFAULT_CFQ is not set ++# CONFIG_DEFAULT_NOOP is not set ++CONFIG_DEFAULT_IOSCHED="deadline" ++CONFIG_PREEMPT_NOTIFIERS=y ++CONFIG_PADATA=y ++CONFIG_ASN1=y ++CONFIG_UNINLINE_SPIN_UNLOCK=y ++CONFIG_INLINE_SPIN_UNLOCK_IRQ=y ++CONFIG_INLINE_READ_UNLOCK=y ++CONFIG_INLINE_READ_UNLOCK_IRQ=y ++CONFIG_INLINE_WRITE_UNLOCK=y ++CONFIG_INLINE_WRITE_UNLOCK_IRQ=y ++CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y ++CONFIG_MUTEX_SPIN_ON_OWNER=y ++CONFIG_RWSEM_SPIN_ON_OWNER=y ++CONFIG_ARCH_USE_QUEUE_RWLOCK=y ++CONFIG_QUEUE_RWLOCK=y ++CONFIG_FREEZER=y ++ ++# ++# Processor type and features ++# ++CONFIG_ZONE_DMA=y ++CONFIG_SMP=y ++CONFIG_X86_FEATURE_NAMES=y ++CONFIG_X86_X2APIC=y ++CONFIG_X86_MPPARSE=y ++CONFIG_X86_EXTENDED_PLATFORM=y ++CONFIG_X86_NUMACHIP=y ++# CONFIG_X86_VSMP is not set ++# CONFIG_X86_UV is not set ++# CONFIG_X86_GOLDFISH is not set ++CONFIG_X86_INTEL_LPSS=y ++CONFIG_IOSF_MBI=m ++# CONFIG_IOSF_MBI_DEBUG is not set ++CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y ++CONFIG_SCHED_OMIT_FRAME_POINTER=y ++CONFIG_HYPERVISOR_GUEST=y ++CONFIG_PARAVIRT=y ++# CONFIG_PARAVIRT_DEBUG is not set ++CONFIG_PARAVIRT_SPINLOCKS=y ++CONFIG_XEN=y ++CONFIG_XEN_DOM0=y ++CONFIG_XEN_PVHVM=y ++CONFIG_XEN_MAX_DOMAIN_MEMORY=500 ++CONFIG_XEN_SAVE_RESTORE=y ++# CONFIG_XEN_DEBUG_FS is not set ++CONFIG_XEN_PVH=y ++CONFIG_KVM_GUEST=y ++# CONFIG_KVM_DEBUG_FS is not set ++# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set ++CONFIG_PARAVIRT_CLOCK=y ++CONFIG_NO_BOOTMEM=y ++CONFIG_MEMTEST=y ++# CONFIG_MK8 is not set ++# CONFIG_MPSC is not set ++# CONFIG_MCORE2 is not set ++# CONFIG_MATOM is not set ++CONFIG_GENERIC_CPU=y ++CONFIG_X86_INTERNODE_CACHE_SHIFT=6 ++CONFIG_X86_L1_CACHE_SHIFT=6 ++CONFIG_X86_TSC=y ++CONFIG_X86_CMPXCHG64=y ++CONFIG_X86_CMOV=y ++CONFIG_X86_MINIMUM_CPU_FAMILY=64 ++CONFIG_X86_DEBUGCTLMSR=y ++CONFIG_PROCESSOR_SELECT=y ++CONFIG_CPU_SUP_INTEL=y ++CONFIG_CPU_SUP_AMD=y ++CONFIG_CPU_SUP_CENTAUR=y ++CONFIG_HPET_TIMER=y ++CONFIG_HPET_EMULATE_RTC=y ++CONFIG_DMI=y ++CONFIG_GART_IOMMU=y ++CONFIG_CALGARY_IOMMU=y ++CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y ++CONFIG_SWIOTLB=y ++CONFIG_IOMMU_HELPER=y ++# CONFIG_MAXSMP is not set ++CONFIG_NR_CPUS=256 ++CONFIG_SCHED_SMT=y ++CONFIG_SCHED_MC=y ++# CONFIG_PREEMPT_NONE is not set ++CONFIG_PREEMPT_VOLUNTARY=y ++# CONFIG_PREEMPT is not set ++CONFIG_X86_UP_APIC_MSI=y ++CONFIG_X86_LOCAL_APIC=y ++CONFIG_X86_IO_APIC=y ++CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y ++CONFIG_X86_MCE=y ++CONFIG_X86_MCE_INTEL=y ++CONFIG_X86_MCE_AMD=y ++CONFIG_X86_MCE_THRESHOLD=y ++CONFIG_X86_MCE_INJECT=m ++CONFIG_X86_THERMAL_VECTOR=y ++CONFIG_X86_16BIT=y ++CONFIG_X86_ESPFIX64=y ++CONFIG_I8K=m ++CONFIG_MICROCODE=y ++CONFIG_MICROCODE_INTEL=y ++CONFIG_MICROCODE_AMD=y ++CONFIG_MICROCODE_OLD_INTERFACE=y ++CONFIG_MICROCODE_INTEL_EARLY=y ++CONFIG_MICROCODE_AMD_EARLY=y ++CONFIG_MICROCODE_EARLY=y ++CONFIG_X86_MSR=m ++CONFIG_X86_CPUID=m ++CONFIG_ARCH_PHYS_ADDR_T_64BIT=y ++CONFIG_ARCH_DMA_ADDR_T_64BIT=y ++CONFIG_DIRECT_GBPAGES=y ++CONFIG_NUMA=y ++CONFIG_AMD_NUMA=y ++CONFIG_X86_64_ACPI_NUMA=y ++CONFIG_NODES_SPAN_OTHER_NODES=y ++# CONFIG_NUMA_EMU is not set ++CONFIG_NODES_SHIFT=6 ++CONFIG_ARCH_SPARSEMEM_ENABLE=y ++CONFIG_ARCH_SPARSEMEM_DEFAULT=y ++CONFIG_ARCH_SELECT_MEMORY_MODEL=y ++CONFIG_ARCH_MEMORY_PROBE=y ++CONFIG_ARCH_PROC_KCORE_TEXT=y ++CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_SPARSEMEM_MANUAL=y ++CONFIG_SPARSEMEM=y ++CONFIG_NEED_MULTIPLE_NODES=y ++CONFIG_HAVE_MEMORY_PRESENT=y ++CONFIG_SPARSEMEM_EXTREME=y ++CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y ++CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER=y ++CONFIG_SPARSEMEM_VMEMMAP=y ++CONFIG_HAVE_MEMBLOCK=y ++CONFIG_HAVE_MEMBLOCK_NODE_MAP=y ++CONFIG_ARCH_DISCARD_MEMBLOCK=y ++CONFIG_MEMORY_ISOLATION=y ++CONFIG_MOVABLE_NODE=y ++CONFIG_HAVE_BOOTMEM_INFO_NODE=y ++CONFIG_MEMORY_HOTPLUG=y ++CONFIG_MEMORY_HOTPLUG_SPARSE=y ++CONFIG_MEMORY_HOTREMOVE=y ++CONFIG_PAGEFLAGS_EXTENDED=y ++CONFIG_SPLIT_PTLOCK_CPUS=4 ++CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y ++CONFIG_MEMORY_BALLOON=y ++CONFIG_BALLOON_COMPACTION=y ++CONFIG_COMPACTION=y ++CONFIG_MIGRATION=y ++CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y ++CONFIG_PHYS_ADDR_T_64BIT=y ++CONFIG_ZONE_DMA_FLAG=1 ++CONFIG_BOUNCE=y ++CONFIG_NEED_BOUNCE_POOL=y ++CONFIG_VIRT_TO_BUS=y ++CONFIG_MMU_NOTIFIER=y ++CONFIG_KSM=y ++CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 ++CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y ++CONFIG_MEMORY_FAILURE=y ++CONFIG_HWPOISON_INJECT=m ++CONFIG_TRANSPARENT_HUGEPAGE=y ++CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y ++# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set ++CONFIG_CLEANCACHE=y ++CONFIG_FRONTSWAP=y ++CONFIG_CMA=y ++# CONFIG_CMA_DEBUG is not set ++CONFIG_CMA_AREAS=7 ++CONFIG_MEM_SOFT_DIRTY=y ++CONFIG_ZSWAP=y ++CONFIG_ZPOOL=y ++CONFIG_ZBUD=y ++CONFIG_ZSMALLOC=y ++CONFIG_PGTABLE_MAPPING=y ++CONFIG_GENERIC_EARLY_IOREMAP=y ++CONFIG_X86_CHECK_BIOS_CORRUPTION=y ++CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y ++CONFIG_X86_RESERVE_LOW=64 ++CONFIG_MTRR=y ++CONFIG_MTRR_SANITIZER=y ++CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1 ++CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 ++CONFIG_X86_PAT=y ++CONFIG_ARCH_USES_PG_UNCACHED=y ++CONFIG_ARCH_RANDOM=y ++CONFIG_X86_SMAP=y ++CONFIG_EFI=y ++CONFIG_EFI_STUB=y ++CONFIG_EFI_MIXED=y ++CONFIG_SECCOMP=y ++# CONFIG_HZ_100 is not set ++CONFIG_HZ_250=y ++# CONFIG_HZ_300 is not set ++# CONFIG_HZ_1000 is not set ++CONFIG_HZ=250 ++CONFIG_SCHED_HRTICK=y ++CONFIG_KEXEC=y ++CONFIG_KEXEC_FILE=y ++CONFIG_KEXEC_VERIFY_SIG=y ++CONFIG_CRASH_DUMP=y ++CONFIG_KEXEC_JUMP=y ++CONFIG_PHYSICAL_START=0x1000000 ++CONFIG_RELOCATABLE=y ++CONFIG_RANDOMIZE_BASE=y ++CONFIG_RANDOMIZE_BASE_MAX_OFFSET=0x40000000 ++CONFIG_X86_NEED_RELOCS=y ++CONFIG_PHYSICAL_ALIGN=0x1000000 ++CONFIG_HOTPLUG_CPU=y ++# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set ++# CONFIG_DEBUG_HOTPLUG_CPU0 is not set ++# CONFIG_COMPAT_VDSO is not set ++# CONFIG_CMDLINE_BOOL is not set ++CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y ++CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y ++CONFIG_USE_PERCPU_NUMA_NODE_ID=y ++ ++# ++# Power management and ACPI options ++# ++CONFIG_ARCH_HIBERNATION_HEADER=y ++CONFIG_SUSPEND=y ++CONFIG_SUSPEND_FREEZER=y ++CONFIG_HIBERNATE_CALLBACKS=y ++CONFIG_HIBERNATION=y ++CONFIG_PM_STD_PARTITION="" ++CONFIG_PM_SLEEP=y ++CONFIG_PM_SLEEP_SMP=y ++# CONFIG_PM_AUTOSLEEP is not set ++CONFIG_PM_WAKELOCKS=y ++CONFIG_PM_WAKELOCKS_LIMIT=100 ++CONFIG_PM_WAKELOCKS_GC=y ++# CONFIG_PM_RUNTIME is not set ++CONFIG_PM=y ++# CONFIG_PM_DEBUG is not set ++CONFIG_PM_CLK=y ++CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y ++CONFIG_ACPI=y ++CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y ++CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y ++CONFIG_ACPI_SLEEP=y ++# CONFIG_ACPI_PROCFS_POWER is not set ++CONFIG_ACPI_EC_DEBUGFS=m ++CONFIG_ACPI_AC=y ++CONFIG_ACPI_BATTERY=y ++CONFIG_ACPI_BUTTON=y ++CONFIG_ACPI_VIDEO=m ++CONFIG_ACPI_FAN=y ++CONFIG_ACPI_DOCK=y ++CONFIG_ACPI_PROCESSOR=y ++CONFIG_ACPI_IPMI=m ++CONFIG_ACPI_HOTPLUG_CPU=y ++CONFIG_ACPI_PROCESSOR_AGGREGATOR=m ++CONFIG_ACPI_THERMAL=y ++CONFIG_ACPI_NUMA=y ++CONFIG_ACPI_CUSTOM_DSDT_FILE="" ++# CONFIG_ACPI_CUSTOM_DSDT is not set ++# CONFIG_ACPI_INITRD_TABLE_OVERRIDE is not set ++# CONFIG_ACPI_DEBUG is not set ++CONFIG_ACPI_PCI_SLOT=y ++CONFIG_X86_PM_TIMER=y ++CONFIG_ACPI_CONTAINER=y ++CONFIG_ACPI_HOTPLUG_MEMORY=y ++CONFIG_ACPI_SBS=m ++CONFIG_ACPI_HED=y ++# CONFIG_ACPI_CUSTOM_METHOD is not set ++CONFIG_ACPI_BGRT=y ++# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set ++CONFIG_HAVE_ACPI_APEI=y ++CONFIG_HAVE_ACPI_APEI_NMI=y ++CONFIG_ACPI_APEI=y ++CONFIG_ACPI_APEI_GHES=y ++CONFIG_ACPI_APEI_PCIEAER=y ++CONFIG_ACPI_APEI_MEMORY_FAILURE=y ++CONFIG_ACPI_APEI_EINJ=m ++# CONFIG_ACPI_APEI_ERST_DEBUG is not set ++CONFIG_ACPI_EXTLOG=m ++CONFIG_SFI=y ++ ++# ++# CPU Frequency scaling ++# ++CONFIG_CPU_FREQ=y ++CONFIG_CPU_FREQ_GOV_COMMON=y ++CONFIG_CPU_FREQ_STAT=y ++CONFIG_CPU_FREQ_STAT_DETAILS=y ++CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y ++# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set ++# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set ++# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set ++# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set ++CONFIG_CPU_FREQ_GOV_PERFORMANCE=y ++CONFIG_CPU_FREQ_GOV_POWERSAVE=y ++CONFIG_CPU_FREQ_GOV_USERSPACE=y ++CONFIG_CPU_FREQ_GOV_ONDEMAND=y ++CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y ++ ++# ++# x86 CPU frequency scaling drivers ++# ++CONFIG_X86_INTEL_PSTATE=y ++CONFIG_X86_PCC_CPUFREQ=y ++CONFIG_X86_ACPI_CPUFREQ=y ++CONFIG_X86_ACPI_CPUFREQ_CPB=y ++CONFIG_X86_POWERNOW_K8=y ++CONFIG_X86_AMD_FREQ_SENSITIVITY=m ++CONFIG_X86_SPEEDSTEP_CENTRINO=y ++CONFIG_X86_P4_CLOCKMOD=m ++ ++# ++# shared options ++# ++CONFIG_X86_SPEEDSTEP_LIB=m ++ ++# ++# CPU Idle ++# ++CONFIG_CPU_IDLE=y ++CONFIG_CPU_IDLE_GOV_LADDER=y ++CONFIG_CPU_IDLE_GOV_MENU=y ++# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set ++CONFIG_INTEL_IDLE=y ++ ++# ++# Memory power savings ++# ++CONFIG_I7300_IDLE_IOAT_CHANNEL=y ++CONFIG_I7300_IDLE=m ++ ++# ++# Bus options (PCI etc.) ++# ++CONFIG_PCI=y ++CONFIG_PCI_DIRECT=y ++CONFIG_PCI_MMCONFIG=y ++CONFIG_PCI_XEN=y ++CONFIG_PCI_DOMAINS=y ++# CONFIG_PCI_CNB20LE_QUIRK is not set ++CONFIG_PCIEPORTBUS=y ++CONFIG_HOTPLUG_PCI_PCIE=y ++CONFIG_PCIEAER=y ++# CONFIG_PCIE_ECRC is not set ++# CONFIG_PCIEAER_INJECT is not set ++CONFIG_PCIEASPM=y ++# CONFIG_PCIEASPM_DEBUG is not set ++CONFIG_PCIEASPM_DEFAULT=y ++# CONFIG_PCIEASPM_POWERSAVE is not set ++# CONFIG_PCIEASPM_PERFORMANCE is not set ++CONFIG_PCI_MSI=y ++# CONFIG_PCI_DEBUG is not set ++CONFIG_PCI_REALLOC_ENABLE_AUTO=y ++CONFIG_PCI_STUB=m ++CONFIG_XEN_PCIDEV_FRONTEND=m ++CONFIG_HT_IRQ=y ++CONFIG_PCI_ATS=y ++CONFIG_PCI_IOV=y ++CONFIG_PCI_PRI=y ++CONFIG_PCI_PASID=y ++# CONFIG_PCI_IOAPIC is not set ++CONFIG_PCI_LABEL=y ++ ++# ++# PCI host controller drivers ++# ++CONFIG_ISA_DMA_API=y ++CONFIG_AMD_NB=y ++CONFIG_PCCARD=m ++CONFIG_PCMCIA=m ++CONFIG_PCMCIA_LOAD_CIS=y ++CONFIG_CARDBUS=y ++ ++# ++# PC-card bridges ++# ++CONFIG_YENTA=m ++CONFIG_YENTA_O2=y ++CONFIG_YENTA_RICOH=y ++CONFIG_YENTA_TI=y ++CONFIG_YENTA_ENE_TUNE=y ++CONFIG_YENTA_TOSHIBA=y ++CONFIG_PD6729=m ++CONFIG_I82092=m ++CONFIG_PCCARD_NONSTATIC=y ++CONFIG_HOTPLUG_PCI=y ++CONFIG_HOTPLUG_PCI_ACPI=y ++CONFIG_HOTPLUG_PCI_ACPI_IBM=m ++CONFIG_HOTPLUG_PCI_CPCI=y ++CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m ++CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m ++CONFIG_HOTPLUG_PCI_SHPC=m ++CONFIG_RAPIDIO=y ++CONFIG_RAPIDIO_TSI721=m ++CONFIG_RAPIDIO_DISC_TIMEOUT=30 ++# CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS is not set ++CONFIG_RAPIDIO_DMA_ENGINE=y ++# CONFIG_RAPIDIO_DEBUG is not set ++CONFIG_RAPIDIO_ENUM_BASIC=m ++ ++# ++# RapidIO Switch drivers ++# ++CONFIG_RAPIDIO_TSI57X=m ++CONFIG_RAPIDIO_CPS_XX=m ++CONFIG_RAPIDIO_TSI568=m ++CONFIG_RAPIDIO_CPS_GEN2=m ++# CONFIG_X86_SYSFB is not set ++ ++# ++# Executable file formats / Emulations ++# ++CONFIG_BINFMT_ELF=y ++CONFIG_COMPAT_BINFMT_ELF=y ++CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y ++CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y ++CONFIG_BINFMT_SCRIPT=y ++# CONFIG_HAVE_AOUT is not set ++CONFIG_BINFMT_MISC=m ++CONFIG_COREDUMP=y ++CONFIG_IA32_EMULATION=y ++# CONFIG_IA32_AOUT is not set ++CONFIG_X86_X32=y ++CONFIG_COMPAT=y ++CONFIG_COMPAT_FOR_U64_ALIGNMENT=y ++CONFIG_SYSVIPC_COMPAT=y ++CONFIG_KEYS_COMPAT=y ++CONFIG_X86_DEV_DMA_OPS=y ++CONFIG_PMC_ATOM=y ++CONFIG_NET=y ++CONFIG_COMPAT_NETLINK_MESSAGES=y ++ ++# ++# Networking options ++# ++CONFIG_PACKET=y ++CONFIG_PACKET_DIAG=m ++CONFIG_UNIX=y ++CONFIG_UNIX_DIAG=m ++CONFIG_XFRM=y ++CONFIG_XFRM_ALGO=m ++CONFIG_XFRM_USER=m ++# CONFIG_XFRM_SUB_POLICY is not set ++# CONFIG_XFRM_MIGRATE is not set ++CONFIG_XFRM_STATISTICS=y ++CONFIG_XFRM_IPCOMP=m ++CONFIG_NET_KEY=m ++# CONFIG_NET_KEY_MIGRATE is not set ++CONFIG_INET=y ++CONFIG_IP_MULTICAST=y ++CONFIG_IP_ADVANCED_ROUTER=y ++CONFIG_IP_FIB_TRIE_STATS=y ++CONFIG_IP_MULTIPLE_TABLES=y ++CONFIG_IP_ROUTE_MULTIPATH=y ++CONFIG_IP_ROUTE_VERBOSE=y ++CONFIG_IP_ROUTE_CLASSID=y ++CONFIG_IP_PNP=y ++CONFIG_IP_PNP_DHCP=y ++# CONFIG_IP_PNP_BOOTP is not set ++# CONFIG_IP_PNP_RARP is not set ++CONFIG_NET_IPIP=m ++CONFIG_NET_IPGRE_DEMUX=m ++CONFIG_NET_IP_TUNNEL=m ++CONFIG_NET_IPGRE=m ++CONFIG_NET_IPGRE_BROADCAST=y ++CONFIG_IP_MROUTE=y ++# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set ++CONFIG_IP_PIMSM_V1=y ++CONFIG_IP_PIMSM_V2=y ++CONFIG_SYN_COOKIES=y ++CONFIG_NET_IPVTI=m ++CONFIG_NET_UDP_TUNNEL=m ++CONFIG_NET_FOU=m ++CONFIG_GENEVE=m ++CONFIG_INET_AH=m ++CONFIG_INET_ESP=m ++CONFIG_INET_IPCOMP=m ++CONFIG_INET_XFRM_TUNNEL=m ++CONFIG_INET_TUNNEL=m ++CONFIG_INET_XFRM_MODE_TRANSPORT=m ++CONFIG_INET_XFRM_MODE_TUNNEL=m ++CONFIG_INET_XFRM_MODE_BEET=m ++CONFIG_INET_LRO=y ++CONFIG_INET_DIAG=m ++CONFIG_INET_TCP_DIAG=m ++CONFIG_INET_UDP_DIAG=m ++CONFIG_TCP_CONG_ADVANCED=y ++CONFIG_TCP_CONG_BIC=m ++CONFIG_TCP_CONG_CUBIC=y ++CONFIG_TCP_CONG_WESTWOOD=m ++CONFIG_TCP_CONG_HTCP=m ++CONFIG_TCP_CONG_HSTCP=m ++CONFIG_TCP_CONG_HYBLA=m ++CONFIG_TCP_CONG_VEGAS=m ++CONFIG_TCP_CONG_SCALABLE=m ++CONFIG_TCP_CONG_LP=m ++CONFIG_TCP_CONG_VENO=m ++CONFIG_TCP_CONG_YEAH=m ++CONFIG_TCP_CONG_ILLINOIS=m ++CONFIG_TCP_CONG_DCTCP=m ++CONFIG_DEFAULT_CUBIC=y ++# CONFIG_DEFAULT_RENO is not set ++CONFIG_DEFAULT_TCP_CONG="cubic" ++CONFIG_TCP_MD5SIG=y ++CONFIG_IPV6=y ++CONFIG_IPV6_ROUTER_PREF=y ++CONFIG_IPV6_ROUTE_INFO=y ++# CONFIG_IPV6_OPTIMISTIC_DAD is not set ++CONFIG_INET6_AH=m ++CONFIG_INET6_ESP=m ++CONFIG_INET6_IPCOMP=m ++CONFIG_IPV6_MIP6=m ++CONFIG_INET6_XFRM_TUNNEL=m ++CONFIG_INET6_TUNNEL=m ++CONFIG_INET6_XFRM_MODE_TRANSPORT=m ++CONFIG_INET6_XFRM_MODE_TUNNEL=m ++CONFIG_INET6_XFRM_MODE_BEET=m ++CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m ++CONFIG_IPV6_VTI=m ++CONFIG_IPV6_SIT=m ++CONFIG_IPV6_SIT_6RD=y ++CONFIG_IPV6_NDISC_NODETYPE=y ++CONFIG_IPV6_TUNNEL=m ++CONFIG_IPV6_GRE=m ++CONFIG_IPV6_MULTIPLE_TABLES=y ++CONFIG_IPV6_SUBTREES=y ++CONFIG_IPV6_MROUTE=y ++CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y ++CONFIG_IPV6_PIMSM_V2=y ++CONFIG_NETLABEL=y ++CONFIG_NETWORK_SECMARK=y ++CONFIG_NET_PTP_CLASSIFY=y ++# CONFIG_NETWORK_PHY_TIMESTAMPING is not set ++CONFIG_NETFILTER=y ++# CONFIG_NETFILTER_DEBUG is not set ++CONFIG_NETFILTER_ADVANCED=y ++CONFIG_BRIDGE_NETFILTER=m ++ ++# ++# Core Netfilter Configuration ++# ++CONFIG_NETFILTER_NETLINK=m ++CONFIG_NETFILTER_NETLINK_ACCT=m ++CONFIG_NETFILTER_NETLINK_QUEUE=m ++CONFIG_NETFILTER_NETLINK_LOG=m ++CONFIG_NF_CONNTRACK=m ++CONFIG_NF_LOG_COMMON=m ++CONFIG_NF_CONNTRACK_MARK=y ++CONFIG_NF_CONNTRACK_SECMARK=y ++CONFIG_NF_CONNTRACK_ZONES=y ++# CONFIG_NF_CONNTRACK_PROCFS is not set ++CONFIG_NF_CONNTRACK_EVENTS=y ++CONFIG_NF_CONNTRACK_TIMEOUT=y ++CONFIG_NF_CONNTRACK_TIMESTAMP=y ++CONFIG_NF_CONNTRACK_LABELS=y ++CONFIG_NF_CT_PROTO_DCCP=m ++CONFIG_NF_CT_PROTO_GRE=m ++CONFIG_NF_CT_PROTO_SCTP=m ++CONFIG_NF_CT_PROTO_UDPLITE=m ++CONFIG_NF_CONNTRACK_AMANDA=m ++CONFIG_NF_CONNTRACK_FTP=m ++CONFIG_NF_CONNTRACK_H323=m ++CONFIG_NF_CONNTRACK_IRC=m ++CONFIG_NF_CONNTRACK_BROADCAST=m ++CONFIG_NF_CONNTRACK_NETBIOS_NS=m ++CONFIG_NF_CONNTRACK_SNMP=m ++CONFIG_NF_CONNTRACK_PPTP=m ++CONFIG_NF_CONNTRACK_SANE=m ++CONFIG_NF_CONNTRACK_SIP=m ++CONFIG_NF_CONNTRACK_TFTP=m ++CONFIG_NF_CT_NETLINK=m ++CONFIG_NF_CT_NETLINK_TIMEOUT=m ++CONFIG_NF_CT_NETLINK_HELPER=m ++CONFIG_NETFILTER_NETLINK_QUEUE_CT=y ++CONFIG_NF_NAT=m ++CONFIG_NF_NAT_NEEDED=y ++CONFIG_NF_NAT_PROTO_DCCP=m ++CONFIG_NF_NAT_PROTO_UDPLITE=m ++CONFIG_NF_NAT_PROTO_SCTP=m ++CONFIG_NF_NAT_AMANDA=m ++CONFIG_NF_NAT_FTP=m ++CONFIG_NF_NAT_IRC=m ++CONFIG_NF_NAT_SIP=m ++CONFIG_NF_NAT_TFTP=m ++CONFIG_NETFILTER_SYNPROXY=m ++CONFIG_NF_TABLES=m ++CONFIG_NF_TABLES_INET=m ++CONFIG_NFT_EXTHDR=m ++CONFIG_NFT_META=m ++CONFIG_NFT_CT=m ++CONFIG_NFT_RBTREE=m ++CONFIG_NFT_HASH=m ++CONFIG_NFT_COUNTER=m ++CONFIG_NFT_LOG=m ++CONFIG_NFT_LIMIT=m ++CONFIG_NFT_MASQ=m ++CONFIG_NFT_NAT=m ++CONFIG_NFT_QUEUE=m ++CONFIG_NFT_REJECT=m ++CONFIG_NFT_REJECT_INET=m ++CONFIG_NFT_COMPAT=m ++CONFIG_NETFILTER_XTABLES=m ++ ++# ++# Xtables combined modules ++# ++CONFIG_NETFILTER_XT_MARK=m ++CONFIG_NETFILTER_XT_CONNMARK=m ++CONFIG_NETFILTER_XT_SET=m ++ ++# ++# Xtables targets ++# ++CONFIG_NETFILTER_XT_TARGET_AUDIT=m ++CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m ++CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m ++CONFIG_NETFILTER_XT_TARGET_CONNMARK=m ++CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m ++CONFIG_NETFILTER_XT_TARGET_CT=m ++CONFIG_NETFILTER_XT_TARGET_DSCP=m ++CONFIG_NETFILTER_XT_TARGET_HL=m ++CONFIG_NETFILTER_XT_TARGET_HMARK=m ++CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m ++CONFIG_NETFILTER_XT_TARGET_LED=m ++CONFIG_NETFILTER_XT_TARGET_LOG=m ++CONFIG_NETFILTER_XT_TARGET_MARK=m ++CONFIG_NETFILTER_XT_NAT=m ++CONFIG_NETFILTER_XT_TARGET_NETMAP=m ++CONFIG_NETFILTER_XT_TARGET_NFLOG=m ++CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m ++# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set ++CONFIG_NETFILTER_XT_TARGET_RATEEST=m ++CONFIG_NETFILTER_XT_TARGET_REDIRECT=m ++CONFIG_NETFILTER_XT_TARGET_TEE=m ++CONFIG_NETFILTER_XT_TARGET_TPROXY=m ++CONFIG_NETFILTER_XT_TARGET_TRACE=m ++CONFIG_NETFILTER_XT_TARGET_SECMARK=m ++CONFIG_NETFILTER_XT_TARGET_TCPMSS=m ++CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m ++ ++# ++# Xtables matches ++# ++CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m ++CONFIG_NETFILTER_XT_MATCH_BPF=m ++CONFIG_NETFILTER_XT_MATCH_CGROUP=m ++CONFIG_NETFILTER_XT_MATCH_CLUSTER=m ++CONFIG_NETFILTER_XT_MATCH_COMMENT=m ++CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m ++CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m ++CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m ++CONFIG_NETFILTER_XT_MATCH_CONNMARK=m ++CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m ++CONFIG_NETFILTER_XT_MATCH_CPU=m ++CONFIG_NETFILTER_XT_MATCH_DCCP=m ++CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m ++CONFIG_NETFILTER_XT_MATCH_DSCP=m ++CONFIG_NETFILTER_XT_MATCH_ECN=m ++CONFIG_NETFILTER_XT_MATCH_ESP=m ++CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m ++CONFIG_NETFILTER_XT_MATCH_HELPER=m ++CONFIG_NETFILTER_XT_MATCH_HL=m ++CONFIG_NETFILTER_XT_MATCH_IPCOMP=m ++CONFIG_NETFILTER_XT_MATCH_IPRANGE=m ++CONFIG_NETFILTER_XT_MATCH_IPVS=m ++CONFIG_NETFILTER_XT_MATCH_L2TP=m ++CONFIG_NETFILTER_XT_MATCH_LENGTH=m ++CONFIG_NETFILTER_XT_MATCH_LIMIT=m ++CONFIG_NETFILTER_XT_MATCH_MAC=m ++CONFIG_NETFILTER_XT_MATCH_MARK=m ++CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m ++CONFIG_NETFILTER_XT_MATCH_NFACCT=m ++CONFIG_NETFILTER_XT_MATCH_OSF=m ++CONFIG_NETFILTER_XT_MATCH_OWNER=m ++CONFIG_NETFILTER_XT_MATCH_POLICY=m ++CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m ++CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m ++CONFIG_NETFILTER_XT_MATCH_QUOTA=m ++CONFIG_NETFILTER_XT_MATCH_RATEEST=m ++CONFIG_NETFILTER_XT_MATCH_REALM=m ++CONFIG_NETFILTER_XT_MATCH_RECENT=m ++CONFIG_NETFILTER_XT_MATCH_SCTP=m ++CONFIG_NETFILTER_XT_MATCH_SOCKET=m ++CONFIG_NETFILTER_XT_MATCH_STATE=m ++CONFIG_NETFILTER_XT_MATCH_STATISTIC=m ++CONFIG_NETFILTER_XT_MATCH_STRING=m ++CONFIG_NETFILTER_XT_MATCH_TCPMSS=m ++CONFIG_NETFILTER_XT_MATCH_TIME=m ++CONFIG_NETFILTER_XT_MATCH_U32=m ++CONFIG_IP_SET=m ++CONFIG_IP_SET_MAX=256 ++CONFIG_IP_SET_BITMAP_IP=m ++CONFIG_IP_SET_BITMAP_IPMAC=m ++CONFIG_IP_SET_BITMAP_PORT=m ++CONFIG_IP_SET_HASH_IP=m ++CONFIG_IP_SET_HASH_IPMARK=m ++CONFIG_IP_SET_HASH_IPPORT=m ++CONFIG_IP_SET_HASH_IPPORTIP=m ++CONFIG_IP_SET_HASH_IPPORTNET=m ++CONFIG_IP_SET_HASH_MAC=m ++CONFIG_IP_SET_HASH_NETPORTNET=m ++CONFIG_IP_SET_HASH_NET=m ++CONFIG_IP_SET_HASH_NETNET=m ++CONFIG_IP_SET_HASH_NETPORT=m ++CONFIG_IP_SET_HASH_NETIFACE=m ++CONFIG_IP_SET_LIST_SET=m ++CONFIG_IP_VS=m ++CONFIG_IP_VS_IPV6=y ++# CONFIG_IP_VS_DEBUG is not set ++CONFIG_IP_VS_TAB_BITS=12 ++ ++# ++# IPVS transport protocol load balancing support ++# ++CONFIG_IP_VS_PROTO_TCP=y ++CONFIG_IP_VS_PROTO_UDP=y ++CONFIG_IP_VS_PROTO_AH_ESP=y ++CONFIG_IP_VS_PROTO_ESP=y ++CONFIG_IP_VS_PROTO_AH=y ++CONFIG_IP_VS_PROTO_SCTP=y ++ ++# ++# IPVS scheduler ++# ++CONFIG_IP_VS_RR=m ++CONFIG_IP_VS_WRR=m ++CONFIG_IP_VS_LC=m ++CONFIG_IP_VS_WLC=m ++CONFIG_IP_VS_FO=m ++CONFIG_IP_VS_LBLC=m ++CONFIG_IP_VS_LBLCR=m ++CONFIG_IP_VS_DH=m ++CONFIG_IP_VS_SH=m ++CONFIG_IP_VS_SED=m ++CONFIG_IP_VS_NQ=m ++ ++# ++# IPVS SH scheduler ++# ++CONFIG_IP_VS_SH_TAB_BITS=8 ++ ++# ++# IPVS application helper ++# ++CONFIG_IP_VS_FTP=m ++CONFIG_IP_VS_NFCT=y ++CONFIG_IP_VS_PE_SIP=m ++ ++# ++# IP: Netfilter Configuration ++# ++CONFIG_NF_DEFRAG_IPV4=m ++CONFIG_NF_CONNTRACK_IPV4=m ++CONFIG_NF_LOG_ARP=m ++CONFIG_NF_LOG_IPV4=m ++CONFIG_NF_TABLES_IPV4=m ++CONFIG_NFT_CHAIN_ROUTE_IPV4=m ++CONFIG_NF_REJECT_IPV4=m ++CONFIG_NFT_REJECT_IPV4=m ++CONFIG_NF_TABLES_ARP=m ++CONFIG_NF_NAT_IPV4=m ++CONFIG_NFT_CHAIN_NAT_IPV4=m ++CONFIG_NF_NAT_MASQUERADE_IPV4=m ++CONFIG_NFT_MASQ_IPV4=m ++CONFIG_NF_NAT_SNMP_BASIC=m ++CONFIG_NF_NAT_PROTO_GRE=m ++CONFIG_NF_NAT_PPTP=m ++CONFIG_NF_NAT_H323=m ++CONFIG_IP_NF_IPTABLES=m ++CONFIG_IP_NF_MATCH_AH=m ++CONFIG_IP_NF_MATCH_ECN=m ++CONFIG_IP_NF_MATCH_RPFILTER=m ++CONFIG_IP_NF_MATCH_TTL=m ++CONFIG_IP_NF_FILTER=m ++CONFIG_IP_NF_TARGET_REJECT=m ++CONFIG_IP_NF_TARGET_SYNPROXY=m ++CONFIG_IP_NF_NAT=m ++CONFIG_IP_NF_TARGET_MASQUERADE=m ++CONFIG_IP_NF_TARGET_NETMAP=m ++CONFIG_IP_NF_TARGET_REDIRECT=m ++CONFIG_IP_NF_MANGLE=m ++CONFIG_IP_NF_TARGET_CLUSTERIP=m ++CONFIG_IP_NF_TARGET_ECN=m ++CONFIG_IP_NF_TARGET_TTL=m ++CONFIG_IP_NF_RAW=m ++CONFIG_IP_NF_SECURITY=m ++CONFIG_IP_NF_ARPTABLES=m ++CONFIG_IP_NF_ARPFILTER=m ++CONFIG_IP_NF_ARP_MANGLE=m ++ ++# ++# IPv6: Netfilter Configuration ++# ++CONFIG_NF_DEFRAG_IPV6=m ++CONFIG_NF_CONNTRACK_IPV6=m ++CONFIG_NF_TABLES_IPV6=m ++CONFIG_NFT_CHAIN_ROUTE_IPV6=m ++CONFIG_NF_REJECT_IPV6=m ++CONFIG_NFT_REJECT_IPV6=m ++CONFIG_NF_LOG_IPV6=m ++CONFIG_NF_NAT_IPV6=m ++CONFIG_NFT_CHAIN_NAT_IPV6=m ++CONFIG_NF_NAT_MASQUERADE_IPV6=m ++CONFIG_NFT_MASQ_IPV6=m ++CONFIG_IP6_NF_IPTABLES=m ++CONFIG_IP6_NF_MATCH_AH=m ++CONFIG_IP6_NF_MATCH_EUI64=m ++CONFIG_IP6_NF_MATCH_FRAG=m ++CONFIG_IP6_NF_MATCH_OPTS=m ++CONFIG_IP6_NF_MATCH_HL=m ++CONFIG_IP6_NF_MATCH_IPV6HEADER=m ++CONFIG_IP6_NF_MATCH_MH=m ++CONFIG_IP6_NF_MATCH_RPFILTER=m ++CONFIG_IP6_NF_MATCH_RT=m ++CONFIG_IP6_NF_TARGET_HL=m ++CONFIG_IP6_NF_FILTER=m ++CONFIG_IP6_NF_TARGET_REJECT=m ++CONFIG_IP6_NF_TARGET_SYNPROXY=m ++CONFIG_IP6_NF_MANGLE=m ++CONFIG_IP6_NF_RAW=m ++CONFIG_IP6_NF_SECURITY=m ++CONFIG_IP6_NF_NAT=m ++CONFIG_IP6_NF_TARGET_MASQUERADE=m ++CONFIG_IP6_NF_TARGET_NPT=m ++CONFIG_NF_TABLES_BRIDGE=m ++CONFIG_NFT_BRIDGE_META=m ++CONFIG_NFT_BRIDGE_REJECT=m ++CONFIG_NF_LOG_BRIDGE=m ++CONFIG_BRIDGE_NF_EBTABLES=m ++CONFIG_BRIDGE_EBT_BROUTE=m ++CONFIG_BRIDGE_EBT_T_FILTER=m ++CONFIG_BRIDGE_EBT_T_NAT=m ++CONFIG_BRIDGE_EBT_802_3=m ++CONFIG_BRIDGE_EBT_AMONG=m ++CONFIG_BRIDGE_EBT_ARP=m ++CONFIG_BRIDGE_EBT_IP=m ++CONFIG_BRIDGE_EBT_IP6=m ++CONFIG_BRIDGE_EBT_LIMIT=m ++CONFIG_BRIDGE_EBT_MARK=m ++CONFIG_BRIDGE_EBT_PKTTYPE=m ++CONFIG_BRIDGE_EBT_STP=m ++CONFIG_BRIDGE_EBT_VLAN=m ++CONFIG_BRIDGE_EBT_ARPREPLY=m ++CONFIG_BRIDGE_EBT_DNAT=m ++CONFIG_BRIDGE_EBT_MARK_T=m ++CONFIG_BRIDGE_EBT_REDIRECT=m ++CONFIG_BRIDGE_EBT_SNAT=m ++CONFIG_BRIDGE_EBT_LOG=m ++CONFIG_BRIDGE_EBT_NFLOG=m ++CONFIG_IP_DCCP=m ++CONFIG_INET_DCCP_DIAG=m ++ ++# ++# DCCP CCIDs Configuration ++# ++# CONFIG_IP_DCCP_CCID2_DEBUG is not set ++# CONFIG_IP_DCCP_CCID3 is not set ++ ++# ++# DCCP Kernel Hacking ++# ++# CONFIG_IP_DCCP_DEBUG is not set ++CONFIG_NET_DCCPPROBE=m ++CONFIG_IP_SCTP=m ++CONFIG_NET_SCTPPROBE=m ++# CONFIG_SCTP_DBG_OBJCNT is not set ++# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set ++CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y ++# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set ++CONFIG_SCTP_COOKIE_HMAC_MD5=y ++CONFIG_SCTP_COOKIE_HMAC_SHA1=y ++CONFIG_RDS=m ++CONFIG_RDS_TCP=m ++# CONFIG_RDS_DEBUG is not set ++CONFIG_TIPC=m ++CONFIG_TIPC_PORTS=8191 ++CONFIG_ATM=m ++CONFIG_ATM_CLIP=m ++# CONFIG_ATM_CLIP_NO_ICMP is not set ++CONFIG_ATM_LANE=m ++CONFIG_ATM_MPOA=m ++CONFIG_ATM_BR2684=m ++# CONFIG_ATM_BR2684_IPFILTER is not set ++CONFIG_L2TP=m ++CONFIG_L2TP_DEBUGFS=m ++CONFIG_L2TP_V3=y ++CONFIG_L2TP_IP=m ++CONFIG_L2TP_ETH=m ++CONFIG_STP=m ++CONFIG_GARP=m ++CONFIG_MRP=m ++CONFIG_BRIDGE=m ++CONFIG_BRIDGE_IGMP_SNOOPING=y ++CONFIG_BRIDGE_VLAN_FILTERING=y ++CONFIG_HAVE_NET_DSA=y ++CONFIG_NET_DSA=m ++CONFIG_NET_DSA_TAG_BRCM=y ++CONFIG_NET_DSA_TAG_DSA=y ++CONFIG_NET_DSA_TAG_EDSA=y ++CONFIG_NET_DSA_TAG_TRAILER=y ++CONFIG_VLAN_8021Q=m ++CONFIG_VLAN_8021Q_GVRP=y ++CONFIG_VLAN_8021Q_MVRP=y ++# CONFIG_DECNET is not set ++CONFIG_LLC=m ++CONFIG_LLC2=m ++# CONFIG_IPX is not set ++# CONFIG_ATALK is not set ++# CONFIG_X25 is not set ++# CONFIG_LAPB is not set ++# CONFIG_PHONET is not set ++# CONFIG_6LOWPAN is not set ++# CONFIG_IEEE802154 is not set ++CONFIG_NET_SCHED=y ++ ++# ++# Queueing/Scheduling ++# ++CONFIG_NET_SCH_CBQ=m ++CONFIG_NET_SCH_HTB=m ++CONFIG_NET_SCH_HFSC=m ++CONFIG_NET_SCH_ATM=m ++CONFIG_NET_SCH_PRIO=m ++CONFIG_NET_SCH_MULTIQ=m ++CONFIG_NET_SCH_RED=m ++CONFIG_NET_SCH_SFB=m ++CONFIG_NET_SCH_SFQ=m ++CONFIG_NET_SCH_TEQL=m ++CONFIG_NET_SCH_TBF=m ++CONFIG_NET_SCH_GRED=m ++CONFIG_NET_SCH_DSMARK=m ++CONFIG_NET_SCH_NETEM=m ++CONFIG_NET_SCH_DRR=m ++CONFIG_NET_SCH_MQPRIO=m ++CONFIG_NET_SCH_CHOKE=m ++CONFIG_NET_SCH_QFQ=m ++CONFIG_NET_SCH_CODEL=m ++CONFIG_NET_SCH_FQ_CODEL=m ++CONFIG_NET_SCH_FQ=m ++CONFIG_NET_SCH_HHF=m ++CONFIG_NET_SCH_PIE=m ++CONFIG_NET_SCH_INGRESS=m ++CONFIG_NET_SCH_PLUG=m ++ ++# ++# Classification ++# ++CONFIG_NET_CLS=y ++CONFIG_NET_CLS_BASIC=m ++CONFIG_NET_CLS_TCINDEX=m ++CONFIG_NET_CLS_ROUTE4=m ++CONFIG_NET_CLS_FW=m ++CONFIG_NET_CLS_U32=m ++# CONFIG_CLS_U32_PERF is not set ++CONFIG_CLS_U32_MARK=y ++CONFIG_NET_CLS_RSVP=m ++CONFIG_NET_CLS_RSVP6=m ++CONFIG_NET_CLS_FLOW=m ++CONFIG_NET_CLS_CGROUP=m ++CONFIG_NET_CLS_BPF=m ++CONFIG_NET_EMATCH=y ++CONFIG_NET_EMATCH_STACK=32 ++CONFIG_NET_EMATCH_CMP=m ++CONFIG_NET_EMATCH_NBYTE=m ++CONFIG_NET_EMATCH_U32=m ++CONFIG_NET_EMATCH_META=m ++CONFIG_NET_EMATCH_TEXT=m ++CONFIG_NET_EMATCH_CANID=m ++CONFIG_NET_EMATCH_IPSET=m ++CONFIG_NET_CLS_ACT=y ++CONFIG_NET_ACT_POLICE=m ++CONFIG_NET_ACT_GACT=m ++CONFIG_GACT_PROB=y ++CONFIG_NET_ACT_MIRRED=m ++CONFIG_NET_ACT_IPT=m ++CONFIG_NET_ACT_NAT=m ++CONFIG_NET_ACT_PEDIT=m ++CONFIG_NET_ACT_SIMP=m ++CONFIG_NET_ACT_SKBEDIT=m ++CONFIG_NET_ACT_CSUM=m ++# CONFIG_NET_CLS_IND is not set ++CONFIG_NET_SCH_FIFO=y ++CONFIG_DCB=y ++CONFIG_DNS_RESOLVER=y ++# CONFIG_BATMAN_ADV is not set ++# CONFIG_OPENVSWITCH is not set ++CONFIG_VSOCKETS=m ++CONFIG_VMWARE_VMCI_VSOCKETS=m ++CONFIG_NETLINK_MMAP=y ++CONFIG_NETLINK_DIAG=m ++CONFIG_NET_MPLS_GSO=m ++CONFIG_HSR=m ++CONFIG_RPS=y ++CONFIG_RFS_ACCEL=y ++CONFIG_XPS=y ++CONFIG_CGROUP_NET_PRIO=y ++CONFIG_CGROUP_NET_CLASSID=y ++CONFIG_NET_RX_BUSY_POLL=y ++CONFIG_BQL=y ++CONFIG_BPF_JIT=y ++CONFIG_NET_FLOW_LIMIT=y ++ ++# ++# Network testing ++# ++# CONFIG_NET_PKTGEN is not set ++# CONFIG_NET_TCPPROBE is not set ++# CONFIG_HAMRADIO is not set ++CONFIG_CAN=m ++CONFIG_CAN_RAW=m ++CONFIG_CAN_BCM=m ++CONFIG_CAN_GW=m ++ ++# ++# CAN Device Drivers ++# ++CONFIG_CAN_VCAN=m ++CONFIG_CAN_SLCAN=m ++CONFIG_CAN_DEV=m ++CONFIG_CAN_CALC_BITTIMING=y ++CONFIG_CAN_LEDS=y ++CONFIG_CAN_JANZ_ICAN3=m ++CONFIG_CAN_SJA1000=m ++CONFIG_CAN_SJA1000_ISA=m ++CONFIG_CAN_SJA1000_PLATFORM=m ++CONFIG_CAN_EMS_PCMCIA=m ++CONFIG_CAN_EMS_PCI=m ++CONFIG_CAN_PEAK_PCMCIA=m ++CONFIG_CAN_PEAK_PCI=m ++CONFIG_CAN_PEAK_PCIEC=y ++CONFIG_CAN_KVASER_PCI=m ++CONFIG_CAN_PLX_PCI=m ++CONFIG_CAN_C_CAN=m ++CONFIG_CAN_C_CAN_PLATFORM=m ++CONFIG_CAN_C_CAN_PCI=m ++CONFIG_CAN_M_CAN=m ++CONFIG_CAN_CC770=m ++CONFIG_CAN_CC770_ISA=m ++CONFIG_CAN_CC770_PLATFORM=m ++ ++# ++# CAN USB interfaces ++# ++CONFIG_CAN_EMS_USB=m ++CONFIG_CAN_ESD_USB2=m ++CONFIG_CAN_GS_USB=m ++CONFIG_CAN_KVASER_USB=m ++CONFIG_CAN_PEAK_USB=m ++CONFIG_CAN_8DEV_USB=m ++CONFIG_CAN_SOFTING=m ++CONFIG_CAN_SOFTING_CS=m ++# CONFIG_CAN_DEBUG_DEVICES is not set ++# CONFIG_IRDA is not set ++CONFIG_BT=m ++CONFIG_BT_RFCOMM=m ++CONFIG_BT_RFCOMM_TTY=y ++CONFIG_BT_BNEP=m ++CONFIG_BT_BNEP_MC_FILTER=y ++CONFIG_BT_BNEP_PROTO_FILTER=y ++CONFIG_BT_HIDP=m ++ ++# ++# Bluetooth device drivers ++# ++CONFIG_BT_HCIBTUSB=m ++CONFIG_BT_HCIBTSDIO=m ++CONFIG_BT_HCIUART=m ++CONFIG_BT_HCIUART_H4=y ++CONFIG_BT_HCIUART_BCSP=y ++CONFIG_BT_HCIUART_ATH3K=y ++CONFIG_BT_HCIUART_LL=y ++CONFIG_BT_HCIUART_3WIRE=y ++CONFIG_BT_HCIBCM203X=m ++CONFIG_BT_HCIBPA10X=m ++CONFIG_BT_HCIBFUSB=m ++CONFIG_BT_HCIDTL1=m ++CONFIG_BT_HCIBT3C=m ++CONFIG_BT_HCIBLUECARD=m ++CONFIG_BT_HCIBTUART=m ++CONFIG_BT_HCIVHCI=m ++CONFIG_BT_MRVL=m ++CONFIG_BT_MRVL_SDIO=m ++CONFIG_BT_ATH3K=m ++CONFIG_BT_WILINK=m ++CONFIG_AF_RXRPC=m ++# CONFIG_AF_RXRPC_DEBUG is not set ++CONFIG_RXKAD=m ++CONFIG_FIB_RULES=y ++CONFIG_WIRELESS=y ++CONFIG_WIRELESS_EXT=y ++CONFIG_WEXT_CORE=y ++CONFIG_WEXT_PROC=y ++CONFIG_WEXT_SPY=y ++CONFIG_WEXT_PRIV=y ++CONFIG_CFG80211=m ++# CONFIG_NL80211_TESTMODE is not set ++# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set ++# CONFIG_CFG80211_REG_DEBUG is not set ++# CONFIG_CFG80211_CERTIFICATION_ONUS is not set ++CONFIG_CFG80211_DEFAULT_PS=y ++CONFIG_CFG80211_DEBUGFS=y ++# CONFIG_CFG80211_INTERNAL_REGDB is not set ++CONFIG_CFG80211_WEXT=y ++CONFIG_LIB80211=m ++CONFIG_LIB80211_CRYPT_WEP=m ++CONFIG_LIB80211_CRYPT_CCMP=m ++CONFIG_LIB80211_CRYPT_TKIP=m ++# CONFIG_LIB80211_DEBUG is not set ++CONFIG_MAC80211=m ++CONFIG_MAC80211_HAS_RC=y ++CONFIG_MAC80211_RC_MINSTREL=y ++CONFIG_MAC80211_RC_MINSTREL_HT=y ++CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y ++CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" ++CONFIG_MAC80211_MESH=y ++CONFIG_MAC80211_LEDS=y ++CONFIG_MAC80211_DEBUGFS=y ++CONFIG_MAC80211_MESSAGE_TRACING=y ++# CONFIG_MAC80211_DEBUG_MENU is not set ++CONFIG_WIMAX=m ++CONFIG_WIMAX_DEBUG_LEVEL=8 ++CONFIG_RFKILL=y ++CONFIG_RFKILL_LEDS=y ++CONFIG_RFKILL_INPUT=y ++CONFIG_RFKILL_REGULATOR=m ++CONFIG_RFKILL_GPIO=m ++# CONFIG_NET_9P is not set ++# CONFIG_CAIF is not set ++CONFIG_CEPH_LIB=m ++# CONFIG_CEPH_LIB_PRETTYDEBUG is not set ++CONFIG_CEPH_LIB_USE_DNS_RESOLVER=y ++# CONFIG_NFC is not set ++CONFIG_HAVE_BPF_JIT=y ++ ++# ++# Device Drivers ++# ++ ++# ++# Generic Driver Options ++# ++CONFIG_UEVENT_HELPER=y ++CONFIG_UEVENT_HELPER_PATH="" ++CONFIG_DEVTMPFS=y ++CONFIG_DEVTMPFS_MOUNT=y ++# CONFIG_STANDALONE is not set ++CONFIG_PREVENT_FIRMWARE_BUILD=y ++CONFIG_FW_LOADER=y ++CONFIG_FIRMWARE_IN_KERNEL=y ++CONFIG_EXTRA_FIRMWARE="" ++CONFIG_FW_LOADER_USER_HELPER=y ++# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set ++CONFIG_ALLOW_DEV_COREDUMP=y ++# CONFIG_DEBUG_DRIVER is not set ++# CONFIG_DEBUG_DEVRES is not set ++CONFIG_SYS_HYPERVISOR=y ++# CONFIG_GENERIC_CPU_DEVICES is not set ++CONFIG_GENERIC_CPU_AUTOPROBE=y ++CONFIG_REGMAP=y ++CONFIG_REGMAP_I2C=y ++CONFIG_REGMAP_MMIO=y ++CONFIG_REGMAP_IRQ=y ++CONFIG_DMA_SHARED_BUFFER=y ++# CONFIG_FENCE_TRACE is not set ++# CONFIG_DMA_CMA is not set ++ ++# ++# Bus devices ++# ++CONFIG_CONNECTOR=y ++CONFIG_PROC_EVENTS=y ++CONFIG_MTD=m ++# CONFIG_MTD_TESTS is not set ++CONFIG_MTD_REDBOOT_PARTS=m ++CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 ++# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set ++# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set ++CONFIG_MTD_CMDLINE_PARTS=m ++CONFIG_MTD_AR7_PARTS=m ++ ++# ++# User Modules And Translation Layers ++# ++CONFIG_MTD_BLKDEVS=m ++CONFIG_MTD_BLOCK=m ++CONFIG_MTD_BLOCK_RO=m ++CONFIG_FTL=m ++CONFIG_NFTL=m ++CONFIG_NFTL_RW=y ++CONFIG_INFTL=m ++CONFIG_RFD_FTL=m ++CONFIG_SSFDC=m ++CONFIG_SM_FTL=m ++CONFIG_MTD_OOPS=m ++CONFIG_MTD_SWAP=m ++ ++# ++# RAM/ROM/Flash chip drivers ++# ++CONFIG_MTD_CFI=m ++CONFIG_MTD_JEDECPROBE=m ++CONFIG_MTD_GEN_PROBE=m ++# CONFIG_MTD_CFI_ADV_OPTIONS is not set ++CONFIG_MTD_MAP_BANK_WIDTH_1=y ++CONFIG_MTD_MAP_BANK_WIDTH_2=y ++CONFIG_MTD_MAP_BANK_WIDTH_4=y ++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set ++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set ++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set ++CONFIG_MTD_CFI_I1=y ++CONFIG_MTD_CFI_I2=y ++# CONFIG_MTD_CFI_I4 is not set ++# CONFIG_MTD_CFI_I8 is not set ++CONFIG_MTD_CFI_INTELEXT=m ++CONFIG_MTD_CFI_AMDSTD=m ++CONFIG_MTD_CFI_STAA=m ++CONFIG_MTD_CFI_UTIL=m ++CONFIG_MTD_RAM=m ++CONFIG_MTD_ROM=m ++CONFIG_MTD_ABSENT=m ++ ++# ++# Mapping drivers for chip access ++# ++CONFIG_MTD_COMPLEX_MAPPINGS=y ++CONFIG_MTD_PHYSMAP=m ++# CONFIG_MTD_PHYSMAP_COMPAT is not set ++CONFIG_MTD_SBC_GXX=m ++CONFIG_MTD_AMD76XROM=m ++CONFIG_MTD_ICHXROM=m ++CONFIG_MTD_ESB2ROM=m ++CONFIG_MTD_CK804XROM=m ++CONFIG_MTD_SCB2_FLASH=m ++CONFIG_MTD_NETtel=m ++CONFIG_MTD_L440GX=m ++CONFIG_MTD_PCI=m ++CONFIG_MTD_PCMCIA=m ++# CONFIG_MTD_PCMCIA_ANONYMOUS is not set ++CONFIG_MTD_GPIO_ADDR=m ++CONFIG_MTD_INTEL_VR_NOR=m ++CONFIG_MTD_PLATRAM=m ++CONFIG_MTD_LATCH_ADDR=m ++ ++# ++# Self-contained MTD device drivers ++# ++CONFIG_MTD_PMC551=m ++# CONFIG_MTD_PMC551_BUGFIX is not set ++# CONFIG_MTD_PMC551_DEBUG is not set ++CONFIG_MTD_SLRAM=m ++CONFIG_MTD_PHRAM=m ++CONFIG_MTD_MTDRAM=m ++CONFIG_MTDRAM_TOTAL_SIZE=4096 ++CONFIG_MTDRAM_ERASE_SIZE=128 ++CONFIG_MTD_BLOCK2MTD=m ++ ++# ++# Disk-On-Chip Device Drivers ++# ++CONFIG_MTD_DOCG3=m ++CONFIG_BCH_CONST_M=14 ++CONFIG_BCH_CONST_T=4 ++CONFIG_MTD_NAND_ECC=m ++# CONFIG_MTD_NAND_ECC_SMC is not set ++CONFIG_MTD_NAND=m ++CONFIG_MTD_NAND_BCH=m ++CONFIG_MTD_NAND_ECC_BCH=y ++CONFIG_MTD_SM_COMMON=m ++CONFIG_MTD_NAND_DENALI=m ++CONFIG_MTD_NAND_DENALI_PCI=m ++CONFIG_MTD_NAND_DENALI_DT=m ++CONFIG_MTD_NAND_DENALI_SCRATCH_REG_ADDR=0xFF108018 ++CONFIG_MTD_NAND_GPIO=m ++# CONFIG_MTD_NAND_OMAP_BCH_BUILD is not set ++CONFIG_MTD_NAND_IDS=m ++CONFIG_MTD_NAND_RICOH=m ++CONFIG_MTD_NAND_DISKONCHIP=m ++# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set ++CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0 ++# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set ++CONFIG_MTD_NAND_DOCG4=m ++CONFIG_MTD_NAND_CAFE=m ++CONFIG_MTD_NAND_NANDSIM=m ++CONFIG_MTD_NAND_PLATFORM=m ++CONFIG_MTD_ONENAND=m ++CONFIG_MTD_ONENAND_VERIFY_WRITE=y ++CONFIG_MTD_ONENAND_GENERIC=m ++# CONFIG_MTD_ONENAND_OTP is not set ++CONFIG_MTD_ONENAND_2X_PROGRAM=y ++ ++# ++# LPDDR & LPDDR2 PCM memory drivers ++# ++CONFIG_MTD_LPDDR=m ++CONFIG_MTD_QINFO_PROBE=m ++CONFIG_MTD_SPI_NOR=m ++CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y ++CONFIG_MTD_UBI=m ++CONFIG_MTD_UBI_WL_THRESHOLD=4096 ++CONFIG_MTD_UBI_BEB_LIMIT=20 ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_MTD_UBI_GLUEBI=m ++CONFIG_MTD_UBI_BLOCK=y ++CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y ++CONFIG_PARPORT=m ++CONFIG_PARPORT_PC=m ++CONFIG_PARPORT_SERIAL=m ++CONFIG_PARPORT_PC_FIFO=y ++# CONFIG_PARPORT_PC_SUPERIO is not set ++CONFIG_PARPORT_PC_PCMCIA=m ++# CONFIG_PARPORT_GSC is not set ++CONFIG_PARPORT_AX88796=m ++CONFIG_PARPORT_1284=y ++CONFIG_PARPORT_NOT_PC=y ++CONFIG_PNP=y ++# CONFIG_PNP_DEBUG_MESSAGES is not set ++ ++# ++# Protocols ++# ++CONFIG_PNPACPI=y ++CONFIG_BLK_DEV=y ++CONFIG_BLK_DEV_NULL_BLK=m ++CONFIG_BLK_DEV_FD=m ++CONFIG_PARIDE=m ++ ++# ++# Parallel IDE high-level drivers ++# ++CONFIG_PARIDE_PD=m ++CONFIG_PARIDE_PCD=m ++CONFIG_PARIDE_PF=m ++CONFIG_PARIDE_PT=m ++CONFIG_PARIDE_PG=m ++ ++# ++# Parallel IDE protocol modules ++# ++CONFIG_PARIDE_ATEN=m ++CONFIG_PARIDE_BPCK=m ++CONFIG_PARIDE_COMM=m ++CONFIG_PARIDE_DSTR=m ++CONFIG_PARIDE_FIT2=m ++CONFIG_PARIDE_FIT3=m ++CONFIG_PARIDE_EPAT=m ++CONFIG_PARIDE_EPATC8=y ++CONFIG_PARIDE_EPIA=m ++CONFIG_PARIDE_FRIQ=m ++CONFIG_PARIDE_FRPW=m ++CONFIG_PARIDE_KBIC=m ++CONFIG_PARIDE_KTTI=m ++CONFIG_PARIDE_ON20=m ++CONFIG_PARIDE_ON26=m ++CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m ++CONFIG_ZRAM=m ++CONFIG_ZRAM_LZ4_COMPRESS=y ++# CONFIG_ZRAM_DEBUG is not set ++CONFIG_BLK_CPQ_CISS_DA=m ++CONFIG_CISS_SCSI_TAPE=y ++CONFIG_BLK_DEV_DAC960=m ++CONFIG_BLK_DEV_UMEM=m ++# CONFIG_BLK_DEV_COW_COMMON is not set ++CONFIG_BLK_DEV_LOOP=y ++CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 ++CONFIG_BLK_DEV_CRYPTOLOOP=m ++CONFIG_BLK_DEV_DRBD=m ++# CONFIG_DRBD_FAULT_INJECTION is not set ++CONFIG_BLK_DEV_NBD=m ++CONFIG_BLK_DEV_NVME=m ++CONFIG_BLK_DEV_SKD=m ++CONFIG_BLK_DEV_OSD=m ++CONFIG_BLK_DEV_SX8=m ++CONFIG_BLK_DEV_RAM=y ++CONFIG_BLK_DEV_RAM_COUNT=16 ++CONFIG_BLK_DEV_RAM_SIZE=65536 ++# CONFIG_BLK_DEV_XIP is not set ++CONFIG_CDROM_PKTCDVD=m ++CONFIG_CDROM_PKTCDVD_BUFFERS=8 ++# CONFIG_CDROM_PKTCDVD_WCACHE is not set ++CONFIG_ATA_OVER_ETH=m ++CONFIG_XEN_BLKDEV_FRONTEND=y ++CONFIG_XEN_BLKDEV_BACKEND=m ++CONFIG_VIRTIO_BLK=y ++# CONFIG_BLK_DEV_HD is not set ++CONFIG_BLK_DEV_RBD=m ++CONFIG_BLK_DEV_RSXX=m ++ ++# ++# Misc devices ++# ++CONFIG_SENSORS_LIS3LV02D=m ++CONFIG_AD525X_DPOT=m ++CONFIG_AD525X_DPOT_I2C=m ++CONFIG_DUMMY_IRQ=m ++CONFIG_IBM_ASM=m ++CONFIG_PHANTOM=m ++CONFIG_SGI_IOC4=m ++CONFIG_TIFM_CORE=m ++CONFIG_TIFM_7XX1=m ++CONFIG_ICS932S401=m ++CONFIG_ENCLOSURE_SERVICES=m ++CONFIG_HP_ILO=m ++CONFIG_APDS9802ALS=m ++CONFIG_ISL29003=m ++CONFIG_ISL29020=m ++CONFIG_SENSORS_TSL2550=m ++CONFIG_SENSORS_BH1780=m ++CONFIG_SENSORS_BH1770=m ++CONFIG_SENSORS_APDS990X=m ++CONFIG_HMC6352=m ++CONFIG_DS1682=m ++CONFIG_VMWARE_BALLOON=m ++CONFIG_BMP085=y ++CONFIG_BMP085_I2C=m ++CONFIG_USB_SWITCH_FSA9480=m ++CONFIG_SRAM=y ++CONFIG_C2PORT=m ++CONFIG_C2PORT_DURAMAR_2150=m ++ ++# ++# EEPROM support ++# ++CONFIG_EEPROM_AT24=m ++CONFIG_EEPROM_LEGACY=m ++CONFIG_EEPROM_MAX6875=m ++CONFIG_EEPROM_93CX6=m ++CONFIG_CB710_CORE=m ++# CONFIG_CB710_DEBUG is not set ++CONFIG_CB710_DEBUG_ASSUMPTIONS=y ++ ++# ++# Texas Instruments shared transport line discipline ++# ++CONFIG_TI_ST=m ++CONFIG_SENSORS_LIS3_I2C=m ++ ++# ++# Altera FPGA firmware download module ++# ++CONFIG_ALTERA_STAPL=m ++CONFIG_VMWARE_VMCI=m ++ ++# ++# Intel MIC Bus Driver ++# ++CONFIG_INTEL_MIC_BUS=m ++ ++# ++# Intel MIC Host Driver ++# ++CONFIG_INTEL_MIC_HOST=m ++ ++# ++# Intel MIC Card Driver ++# ++CONFIG_INTEL_MIC_CARD=m ++CONFIG_GENWQE=m ++CONFIG_GENWQE_PLATFORM_ERROR_RECOVERY=0 ++CONFIG_ECHO=m ++# CONFIG_CXL_BASE is not set ++CONFIG_HAVE_IDE=y ++# CONFIG_IDE is not set ++ ++# ++# SCSI device support ++# ++CONFIG_SCSI_MOD=y ++CONFIG_RAID_ATTRS=m ++CONFIG_SCSI=y ++CONFIG_SCSI_DMA=y ++CONFIG_SCSI_NETLINK=y ++# CONFIG_SCSI_MQ_DEFAULT is not set ++CONFIG_SCSI_PROC_FS=y ++ ++# ++# SCSI support type (disk, tape, CD-ROM) ++# ++CONFIG_BLK_DEV_SD=y ++CONFIG_CHR_DEV_ST=m ++CONFIG_CHR_DEV_OSST=m ++CONFIG_BLK_DEV_SR=y ++# CONFIG_BLK_DEV_SR_VENDOR is not set ++CONFIG_CHR_DEV_SG=y ++CONFIG_CHR_DEV_SCH=m ++CONFIG_SCSI_ENCLOSURE=m ++CONFIG_SCSI_CONSTANTS=y ++CONFIG_SCSI_LOGGING=y ++CONFIG_SCSI_SCAN_ASYNC=y ++ ++# ++# SCSI Transports ++# ++CONFIG_SCSI_SPI_ATTRS=m ++CONFIG_SCSI_FC_ATTRS=m ++CONFIG_SCSI_ISCSI_ATTRS=m ++CONFIG_SCSI_SAS_ATTRS=m ++CONFIG_SCSI_SAS_LIBSAS=m ++CONFIG_SCSI_SAS_ATA=y ++CONFIG_SCSI_SAS_HOST_SMP=y ++CONFIG_SCSI_SRP_ATTRS=m ++CONFIG_SCSI_LOWLEVEL=y ++CONFIG_ISCSI_TCP=m ++CONFIG_ISCSI_BOOT_SYSFS=m ++CONFIG_SCSI_CXGB3_ISCSI=m ++CONFIG_SCSI_CXGB4_ISCSI=m ++CONFIG_SCSI_BNX2_ISCSI=m ++CONFIG_SCSI_BNX2X_FCOE=m ++CONFIG_BE2ISCSI=m ++CONFIG_BLK_DEV_3W_XXXX_RAID=m ++CONFIG_SCSI_HPSA=m ++CONFIG_SCSI_3W_9XXX=m ++CONFIG_SCSI_3W_SAS=m ++CONFIG_SCSI_ACARD=m ++CONFIG_SCSI_AACRAID=m ++CONFIG_SCSI_AIC7XXX=m ++CONFIG_AIC7XXX_CMDS_PER_DEVICE=8 ++CONFIG_AIC7XXX_RESET_DELAY_MS=5000 ++# CONFIG_AIC7XXX_DEBUG_ENABLE is not set ++CONFIG_AIC7XXX_DEBUG_MASK=0 ++CONFIG_AIC7XXX_REG_PRETTY_PRINT=y ++CONFIG_SCSI_AIC79XX=m ++CONFIG_AIC79XX_CMDS_PER_DEVICE=32 ++CONFIG_AIC79XX_RESET_DELAY_MS=5000 ++# CONFIG_AIC79XX_DEBUG_ENABLE is not set ++CONFIG_AIC79XX_DEBUG_MASK=0 ++CONFIG_AIC79XX_REG_PRETTY_PRINT=y ++CONFIG_SCSI_AIC94XX=m ++# CONFIG_AIC94XX_DEBUG is not set ++CONFIG_SCSI_MVSAS=m ++# CONFIG_SCSI_MVSAS_DEBUG is not set ++# CONFIG_SCSI_MVSAS_TASKLET is not set ++CONFIG_SCSI_MVUMI=m ++CONFIG_SCSI_DPT_I2O=m ++CONFIG_SCSI_ADVANSYS=m ++CONFIG_SCSI_ARCMSR=m ++CONFIG_SCSI_ESAS2R=m ++CONFIG_MEGARAID_NEWGEN=y ++CONFIG_MEGARAID_MM=m ++CONFIG_MEGARAID_MAILBOX=m ++CONFIG_MEGARAID_LEGACY=m ++CONFIG_MEGARAID_SAS=m ++CONFIG_SCSI_MPT2SAS=m ++CONFIG_SCSI_MPT2SAS_MAX_SGE=128 ++# CONFIG_SCSI_MPT2SAS_LOGGING is not set ++CONFIG_SCSI_MPT3SAS=m ++CONFIG_SCSI_MPT3SAS_MAX_SGE=128 ++# CONFIG_SCSI_MPT3SAS_LOGGING is not set ++CONFIG_SCSI_UFSHCD=m ++CONFIG_SCSI_UFSHCD_PCI=m ++CONFIG_SCSI_UFSHCD_PLATFORM=m ++CONFIG_SCSI_HPTIOP=m ++CONFIG_SCSI_BUSLOGIC=m ++CONFIG_SCSI_FLASHPOINT=y ++CONFIG_VMWARE_PVSCSI=m ++CONFIG_XEN_SCSI_FRONTEND=m ++CONFIG_HYPERV_STORAGE=m ++CONFIG_LIBFC=m ++CONFIG_LIBFCOE=m ++CONFIG_FCOE=m ++CONFIG_FCOE_FNIC=m ++CONFIG_SCSI_DMX3191D=m ++CONFIG_SCSI_EATA=m ++CONFIG_SCSI_EATA_TAGGED_QUEUE=y ++CONFIG_SCSI_EATA_LINKED_COMMANDS=y ++CONFIG_SCSI_EATA_MAX_TAGS=16 ++CONFIG_SCSI_FUTURE_DOMAIN=m ++CONFIG_SCSI_GDTH=m ++CONFIG_SCSI_ISCI=m ++CONFIG_SCSI_IPS=m ++CONFIG_SCSI_INITIO=m ++CONFIG_SCSI_INIA100=m ++CONFIG_SCSI_PPA=m ++CONFIG_SCSI_IMM=m ++# CONFIG_SCSI_IZIP_EPP16 is not set ++# CONFIG_SCSI_IZIP_SLOW_CTR is not set ++CONFIG_SCSI_STEX=m ++CONFIG_SCSI_SYM53C8XX_2=m ++CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 ++CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 ++CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 ++CONFIG_SCSI_SYM53C8XX_MMIO=y ++CONFIG_SCSI_IPR=m ++CONFIG_SCSI_IPR_TRACE=y ++CONFIG_SCSI_IPR_DUMP=y ++CONFIG_SCSI_QLOGIC_1280=m ++CONFIG_SCSI_QLA_FC=m ++CONFIG_TCM_QLA2XXX=m ++CONFIG_SCSI_QLA_ISCSI=m ++CONFIG_SCSI_LPFC=m ++# CONFIG_SCSI_LPFC_DEBUG_FS is not set ++CONFIG_SCSI_DC395x=m ++# CONFIG_SCSI_DC390T is not set ++# CONFIG_SCSI_DEBUG is not set ++CONFIG_SCSI_PMCRAID=m ++CONFIG_SCSI_PM8001=m ++CONFIG_SCSI_BFA_FC=m ++CONFIG_SCSI_VIRTIO=m ++CONFIG_SCSI_CHELSIO_FCOE=m ++CONFIG_SCSI_LOWLEVEL_PCMCIA=y ++CONFIG_PCMCIA_AHA152X=m ++CONFIG_PCMCIA_FDOMAIN=m ++CONFIG_PCMCIA_QLOGIC=m ++CONFIG_PCMCIA_SYM53C500=m ++CONFIG_SCSI_DH=m ++CONFIG_SCSI_DH_RDAC=m ++CONFIG_SCSI_DH_HP_SW=m ++CONFIG_SCSI_DH_EMC=m ++CONFIG_SCSI_DH_ALUA=m ++CONFIG_SCSI_OSD_INITIATOR=m ++CONFIG_SCSI_OSD_ULD=m ++CONFIG_SCSI_OSD_DPRINT_SENSE=1 ++# CONFIG_SCSI_OSD_DEBUG is not set ++CONFIG_ATA=y ++# CONFIG_ATA_NONSTANDARD is not set ++CONFIG_ATA_VERBOSE_ERROR=y ++CONFIG_ATA_ACPI=y ++CONFIG_SATA_PMP=y ++ ++# ++# Controllers with non-SFF native interface ++# ++CONFIG_SATA_AHCI=m ++CONFIG_SATA_AHCI_PLATFORM=m ++CONFIG_SATA_INIC162X=m ++CONFIG_SATA_ACARD_AHCI=m ++CONFIG_SATA_SIL24=m ++CONFIG_ATA_SFF=y ++ ++# ++# SFF controllers with custom DMA interface ++# ++CONFIG_PDC_ADMA=m ++CONFIG_SATA_QSTOR=m ++CONFIG_SATA_SX4=m ++CONFIG_ATA_BMDMA=y ++ ++# ++# SATA SFF controllers with BMDMA ++# ++CONFIG_ATA_PIIX=y ++CONFIG_SATA_MV=m ++CONFIG_SATA_NV=m ++CONFIG_SATA_PROMISE=m ++CONFIG_SATA_SIL=m ++CONFIG_SATA_SIS=m ++CONFIG_SATA_SVW=m ++CONFIG_SATA_ULI=m ++CONFIG_SATA_VIA=m ++CONFIG_SATA_VITESSE=m ++ ++# ++# PATA SFF controllers with BMDMA ++# ++CONFIG_PATA_ALI=m ++CONFIG_PATA_AMD=m ++CONFIG_PATA_ARTOP=m ++CONFIG_PATA_ATIIXP=m ++CONFIG_PATA_ATP867X=m ++CONFIG_PATA_CMD64X=m ++CONFIG_PATA_CYPRESS=m ++CONFIG_PATA_EFAR=m ++CONFIG_PATA_HPT366=m ++CONFIG_PATA_HPT37X=m ++CONFIG_PATA_HPT3X2N=m ++CONFIG_PATA_HPT3X3=m ++# CONFIG_PATA_HPT3X3_DMA is not set ++CONFIG_PATA_IT8213=m ++CONFIG_PATA_IT821X=m ++CONFIG_PATA_JMICRON=m ++CONFIG_PATA_MARVELL=m ++CONFIG_PATA_NETCELL=m ++CONFIG_PATA_NINJA32=m ++CONFIG_PATA_NS87415=m ++CONFIG_PATA_OLDPIIX=m ++CONFIG_PATA_OPTIDMA=m ++CONFIG_PATA_PDC2027X=m ++CONFIG_PATA_PDC_OLD=m ++CONFIG_PATA_RADISYS=m ++CONFIG_PATA_RDC=m ++CONFIG_PATA_SCH=m ++CONFIG_PATA_SERVERWORKS=m ++CONFIG_PATA_SIL680=m ++CONFIG_PATA_SIS=y ++CONFIG_PATA_TOSHIBA=m ++CONFIG_PATA_TRIFLEX=m ++CONFIG_PATA_VIA=m ++CONFIG_PATA_WINBOND=m ++ ++# ++# PIO-only SFF controllers ++# ++CONFIG_PATA_CMD640_PCI=m ++CONFIG_PATA_MPIIX=m ++CONFIG_PATA_NS87410=m ++CONFIG_PATA_OPTI=m ++CONFIG_PATA_PCMCIA=m ++CONFIG_PATA_PLATFORM=m ++CONFIG_PATA_RZ1000=m ++ ++# ++# Generic fallback / legacy drivers ++# ++CONFIG_PATA_ACPI=m ++CONFIG_ATA_GENERIC=y ++CONFIG_PATA_LEGACY=m ++CONFIG_MD=y ++CONFIG_BLK_DEV_MD=y ++CONFIG_MD_AUTODETECT=y ++CONFIG_MD_LINEAR=m ++CONFIG_MD_RAID0=m ++CONFIG_MD_RAID1=m ++CONFIG_MD_RAID10=m ++CONFIG_MD_RAID456=m ++CONFIG_MD_MULTIPATH=m ++CONFIG_MD_FAULTY=m ++CONFIG_BCACHE=m ++# CONFIG_BCACHE_DEBUG is not set ++# CONFIG_BCACHE_CLOSURES_DEBUG is not set ++CONFIG_BLK_DEV_DM_BUILTIN=y ++CONFIG_BLK_DEV_DM=y ++# CONFIG_DM_DEBUG is not set ++CONFIG_DM_BUFIO=m ++CONFIG_DM_BIO_PRISON=m ++CONFIG_DM_PERSISTENT_DATA=m ++# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set ++CONFIG_DM_CRYPT=m ++CONFIG_DM_SNAPSHOT=m ++CONFIG_DM_THIN_PROVISIONING=m ++CONFIG_DM_CACHE=m ++CONFIG_DM_CACHE_MQ=m ++CONFIG_DM_CACHE_CLEANER=m ++CONFIG_DM_ERA=m ++CONFIG_DM_MIRROR=m ++CONFIG_DM_LOG_USERSPACE=m ++CONFIG_DM_RAID=m ++CONFIG_DM_ZERO=m ++CONFIG_DM_MULTIPATH=m ++CONFIG_DM_MULTIPATH_QL=m ++CONFIG_DM_MULTIPATH_ST=m ++CONFIG_DM_DELAY=m ++CONFIG_DM_UEVENT=y ++CONFIG_DM_FLAKEY=m ++CONFIG_DM_VERITY=m ++CONFIG_DM_SWITCH=m ++CONFIG_TARGET_CORE=m ++CONFIG_TCM_IBLOCK=m ++CONFIG_TCM_FILEIO=m ++CONFIG_TCM_PSCSI=m ++CONFIG_TCM_USER=m ++CONFIG_LOOPBACK_TARGET=m ++CONFIG_TCM_FC=m ++CONFIG_ISCSI_TARGET=m ++CONFIG_SBP_TARGET=m ++# CONFIG_FUSION is not set ++ ++# ++# IEEE 1394 (FireWire) support ++# ++CONFIG_FIREWIRE=m ++CONFIG_FIREWIRE_OHCI=m ++CONFIG_FIREWIRE_SBP2=m ++CONFIG_FIREWIRE_NET=m ++CONFIG_FIREWIRE_NOSY=m ++CONFIG_I2O=m ++CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y ++CONFIG_I2O_EXT_ADAPTEC=y ++CONFIG_I2O_EXT_ADAPTEC_DMA64=y ++CONFIG_I2O_CONFIG=m ++# CONFIG_I2O_CONFIG_OLD_IOCTL is not set ++CONFIG_I2O_BUS=m ++CONFIG_I2O_BLOCK=m ++CONFIG_I2O_SCSI=m ++CONFIG_I2O_PROC=m ++# CONFIG_MACINTOSH_DRIVERS is not set ++CONFIG_NETDEVICES=y ++CONFIG_MII=m ++CONFIG_NET_CORE=y ++CONFIG_BONDING=m ++CONFIG_DUMMY=m ++CONFIG_EQUALIZER=m ++CONFIG_NET_FC=y ++CONFIG_IFB=m ++CONFIG_NET_TEAM=m ++CONFIG_NET_TEAM_MODE_BROADCAST=m ++CONFIG_NET_TEAM_MODE_ROUNDROBIN=m ++CONFIG_NET_TEAM_MODE_RANDOM=m ++CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m ++CONFIG_NET_TEAM_MODE_LOADBALANCE=m ++CONFIG_MACVLAN=m ++CONFIG_MACVTAP=m ++CONFIG_VXLAN=m ++CONFIG_NETCONSOLE=m ++CONFIG_NETCONSOLE_DYNAMIC=y ++CONFIG_NETPOLL=y ++CONFIG_NET_POLL_CONTROLLER=y ++CONFIG_RIONET=m ++CONFIG_RIONET_TX_SIZE=128 ++CONFIG_RIONET_RX_SIZE=128 ++CONFIG_TUN=y ++CONFIG_VETH=m ++CONFIG_VIRTIO_NET=y ++CONFIG_NLMON=m ++CONFIG_SUNGEM_PHY=m ++# CONFIG_ARCNET is not set ++# CONFIG_ATM_DRIVERS is not set ++ ++# ++# CAIF transport drivers ++# ++CONFIG_VHOST_NET=m ++CONFIG_VHOST_SCSI=m ++CONFIG_VHOST_RING=m ++CONFIG_VHOST=m ++ ++# ++# Distributed Switch Architecture drivers ++# ++CONFIG_NET_DSA_MV88E6XXX=m ++CONFIG_NET_DSA_MV88E6060=m ++CONFIG_NET_DSA_MV88E6XXX_NEED_PPU=y ++CONFIG_NET_DSA_MV88E6131=m ++CONFIG_NET_DSA_MV88E6123_61_65=m ++CONFIG_NET_DSA_MV88E6171=m ++CONFIG_NET_DSA_BCM_SF2=m ++CONFIG_ETHERNET=y ++CONFIG_MDIO=m ++CONFIG_NET_VENDOR_3COM=y ++CONFIG_PCMCIA_3C574=m ++CONFIG_PCMCIA_3C589=m ++CONFIG_VORTEX=m ++CONFIG_TYPHOON=m ++CONFIG_NET_VENDOR_ADAPTEC=y ++CONFIG_ADAPTEC_STARFIRE=m ++CONFIG_NET_VENDOR_AGERE=y ++CONFIG_ET131X=m ++CONFIG_NET_VENDOR_ALTEON=y ++CONFIG_ACENIC=m ++# CONFIG_ACENIC_OMIT_TIGON_I is not set ++CONFIG_ALTERA_TSE=m ++CONFIG_NET_VENDOR_AMD=y ++CONFIG_AMD8111_ETH=m ++CONFIG_PCNET32=m ++CONFIG_PCMCIA_NMCLAN=m ++# CONFIG_NET_XGENE is not set ++CONFIG_NET_VENDOR_ARC=y ++CONFIG_NET_VENDOR_ATHEROS=y ++CONFIG_ATL2=m ++CONFIG_ATL1=m ++CONFIG_ATL1E=m ++CONFIG_ATL1C=m ++CONFIG_ALX=m ++CONFIG_NET_VENDOR_BROADCOM=y ++CONFIG_B44=m ++CONFIG_B44_PCI_AUTOSELECT=y ++CONFIG_B44_PCICORE_AUTOSELECT=y ++CONFIG_B44_PCI=y ++CONFIG_BNX2=m ++CONFIG_CNIC=m ++CONFIG_TIGON3=m ++CONFIG_BNX2X=m ++CONFIG_BNX2X_SRIOV=y ++CONFIG_NET_VENDOR_BROCADE=y ++CONFIG_BNA=m ++CONFIG_NET_VENDOR_CHELSIO=y ++CONFIG_CHELSIO_T1=m ++CONFIG_CHELSIO_T1_1G=y ++CONFIG_CHELSIO_T3=m ++CONFIG_CHELSIO_T4=m ++CONFIG_CHELSIO_T4_DCB=y ++CONFIG_CHELSIO_T4VF=m ++CONFIG_NET_VENDOR_CISCO=y ++CONFIG_ENIC=m ++CONFIG_CX_ECAT=m ++CONFIG_DNET=m ++CONFIG_NET_VENDOR_DEC=y ++CONFIG_NET_TULIP=y ++CONFIG_DE2104X=m ++CONFIG_DE2104X_DSL=0 ++CONFIG_TULIP=m ++# CONFIG_TULIP_MWI is not set ++# CONFIG_TULIP_MMIO is not set ++# CONFIG_TULIP_NAPI is not set ++CONFIG_DE4X5=m ++CONFIG_WINBOND_840=m ++CONFIG_DM9102=m ++CONFIG_ULI526X=m ++CONFIG_PCMCIA_XIRCOM=m ++CONFIG_NET_VENDOR_DLINK=y ++CONFIG_DL2K=m ++CONFIG_SUNDANCE=m ++# CONFIG_SUNDANCE_MMIO is not set ++CONFIG_NET_VENDOR_EMULEX=y ++CONFIG_BE2NET=m ++CONFIG_BE2NET_VXLAN=y ++CONFIG_NET_VENDOR_EXAR=y ++CONFIG_S2IO=m ++CONFIG_VXGE=m ++# CONFIG_VXGE_DEBUG_TRACE_ALL is not set ++CONFIG_NET_VENDOR_FUJITSU=y ++CONFIG_PCMCIA_FMVJ18X=m ++CONFIG_NET_VENDOR_HP=y ++CONFIG_HP100=m ++CONFIG_NET_VENDOR_INTEL=y ++CONFIG_E100=m ++CONFIG_E1000=m ++CONFIG_E1000E=m ++CONFIG_IGB=m ++CONFIG_IGB_HWMON=y ++CONFIG_IGB_DCA=y ++CONFIG_IGBVF=m ++CONFIG_IXGB=m ++CONFIG_IXGBE=m ++CONFIG_IXGBE_HWMON=y ++CONFIG_IXGBE_DCA=y ++CONFIG_IXGBE_DCB=y ++CONFIG_IXGBEVF=m ++CONFIG_I40E=m ++CONFIG_I40E_VXLAN=y ++CONFIG_I40E_DCB=y ++CONFIG_I40E_FCOE=y ++CONFIG_I40EVF=m ++CONFIG_FM10K=m ++CONFIG_FM10K_VXLAN=y ++CONFIG_NET_VENDOR_I825XX=y ++CONFIG_IP1000=m ++CONFIG_JME=m ++CONFIG_NET_VENDOR_MARVELL=y ++CONFIG_MVMDIO=m ++CONFIG_SKGE=m ++# CONFIG_SKGE_DEBUG is not set ++CONFIG_SKGE_GENESIS=y ++CONFIG_SKY2=m ++# CONFIG_SKY2_DEBUG is not set ++CONFIG_NET_VENDOR_MELLANOX=y ++CONFIG_MLX4_EN=m ++CONFIG_MLX4_EN_DCB=y ++CONFIG_MLX4_EN_VXLAN=y ++CONFIG_MLX4_CORE=m ++# CONFIG_MLX4_DEBUG is not set ++# CONFIG_MLX5_CORE is not set ++CONFIG_NET_VENDOR_MICREL=y ++CONFIG_KS8842=m ++CONFIG_KS8851_MLL=m ++CONFIG_KSZ884X_PCI=m ++CONFIG_NET_VENDOR_MYRI=y ++CONFIG_MYRI10GE=m ++CONFIG_MYRI10GE_DCA=y ++CONFIG_FEALNX=m ++CONFIG_NET_VENDOR_NATSEMI=y ++CONFIG_NATSEMI=m ++CONFIG_NS83820=m ++CONFIG_NET_VENDOR_8390=y ++CONFIG_PCMCIA_AXNET=m ++CONFIG_NE2K_PCI=m ++CONFIG_PCMCIA_PCNET=m ++CONFIG_NET_VENDOR_NVIDIA=y ++CONFIG_FORCEDETH=m ++CONFIG_NET_VENDOR_OKI=y ++CONFIG_ETHOC=m ++CONFIG_NET_PACKET_ENGINE=y ++CONFIG_HAMACHI=m ++CONFIG_YELLOWFIN=m ++CONFIG_NET_VENDOR_QLOGIC=y ++CONFIG_QLA3XXX=m ++CONFIG_QLCNIC=m ++CONFIG_QLCNIC_SRIOV=y ++CONFIG_QLCNIC_DCB=y ++CONFIG_QLCNIC_VXLAN=y ++CONFIG_QLCNIC_HWMON=y ++CONFIG_QLGE=m ++CONFIG_NETXEN_NIC=m ++CONFIG_NET_VENDOR_QUALCOMM=y ++CONFIG_NET_VENDOR_REALTEK=y ++CONFIG_ATP=m ++CONFIG_8139CP=m ++CONFIG_8139TOO=m ++CONFIG_8139TOO_PIO=y ++# CONFIG_8139TOO_TUNE_TWISTER is not set ++CONFIG_8139TOO_8129=y ++# CONFIG_8139_OLD_RX_RESET is not set ++CONFIG_R8169=m ++CONFIG_NET_VENDOR_RDC=y ++CONFIG_R6040=m ++CONFIG_NET_VENDOR_SAMSUNG=y ++CONFIG_SXGBE_ETH=m ++CONFIG_NET_VENDOR_SEEQ=y ++CONFIG_NET_VENDOR_SILAN=y ++CONFIG_SC92031=m ++CONFIG_NET_VENDOR_SIS=y ++CONFIG_SIS900=m ++CONFIG_SIS190=m ++CONFIG_SFC=m ++CONFIG_SFC_MTD=y ++CONFIG_SFC_MCDI_MON=y ++CONFIG_SFC_SRIOV=y ++CONFIG_NET_VENDOR_SMSC=y ++CONFIG_PCMCIA_SMC91C92=m ++CONFIG_EPIC100=m ++CONFIG_SMSC911X=m ++# CONFIG_SMSC911X_ARCH_HOOKS is not set ++CONFIG_SMSC9420=m ++CONFIG_NET_VENDOR_STMICRO=y ++CONFIG_STMMAC_ETH=m ++CONFIG_STMMAC_PLATFORM=y ++# CONFIG_STMMAC_PCI is not set ++# CONFIG_STMMAC_DEBUG_FS is not set ++# CONFIG_STMMAC_DA is not set ++CONFIG_NET_VENDOR_SUN=y ++CONFIG_HAPPYMEAL=m ++CONFIG_SUNGEM=m ++CONFIG_CASSINI=m ++CONFIG_NIU=m ++CONFIG_NET_VENDOR_TEHUTI=y ++CONFIG_TEHUTI=m ++CONFIG_NET_VENDOR_TI=y ++CONFIG_TLAN=m ++CONFIG_NET_VENDOR_VIA=y ++CONFIG_VIA_RHINE=m ++CONFIG_VIA_RHINE_MMIO=y ++CONFIG_VIA_VELOCITY=m ++CONFIG_NET_VENDOR_WIZNET=y ++CONFIG_WIZNET_W5100=m ++CONFIG_WIZNET_W5300=m ++# CONFIG_WIZNET_BUS_DIRECT is not set ++# CONFIG_WIZNET_BUS_INDIRECT is not set ++CONFIG_WIZNET_BUS_ANY=y ++CONFIG_NET_VENDOR_XIRCOM=y ++CONFIG_PCMCIA_XIRC2PS=m ++# CONFIG_FDDI is not set ++# CONFIG_HIPPI is not set ++# CONFIG_NET_SB1000 is not set ++CONFIG_PHYLIB=y ++ ++# ++# MII PHY device drivers ++# ++CONFIG_AT803X_PHY=m ++CONFIG_AMD_PHY=m ++CONFIG_MARVELL_PHY=m ++CONFIG_DAVICOM_PHY=m ++CONFIG_QSEMI_PHY=m ++CONFIG_LXT_PHY=m ++CONFIG_CICADA_PHY=m ++CONFIG_VITESSE_PHY=m ++CONFIG_SMSC_PHY=m ++CONFIG_BROADCOM_PHY=m ++CONFIG_BCM7XXX_PHY=m ++CONFIG_BCM87XX_PHY=m ++CONFIG_ICPLUS_PHY=m ++CONFIG_REALTEK_PHY=m ++CONFIG_NATIONAL_PHY=m ++CONFIG_STE10XP=m ++CONFIG_LSI_ET1011C_PHY=m ++CONFIG_MICREL_PHY=m ++CONFIG_FIXED_PHY=y ++CONFIG_MDIO_BITBANG=m ++CONFIG_MDIO_GPIO=m ++CONFIG_MDIO_BCM_UNIMAC=m ++# CONFIG_PLIP is not set ++CONFIG_PPP=y ++CONFIG_PPP_BSDCOMP=m ++CONFIG_PPP_DEFLATE=m ++CONFIG_PPP_FILTER=y ++CONFIG_PPP_MPPE=m ++CONFIG_PPP_MULTILINK=y ++CONFIG_PPPOATM=m ++CONFIG_PPPOE=m ++CONFIG_PPTP=m ++CONFIG_PPPOL2TP=m ++CONFIG_PPP_ASYNC=m ++CONFIG_PPP_SYNC_TTY=m ++# CONFIG_SLIP is not set ++CONFIG_SLHC=y ++CONFIG_USB_NET_DRIVERS=m ++CONFIG_USB_CATC=m ++CONFIG_USB_KAWETH=m ++CONFIG_USB_PEGASUS=m ++CONFIG_USB_RTL8150=m ++CONFIG_USB_RTL8152=m ++CONFIG_USB_USBNET=m ++CONFIG_USB_NET_AX8817X=m ++CONFIG_USB_NET_AX88179_178A=m ++CONFIG_USB_NET_CDCETHER=m ++CONFIG_USB_NET_CDC_EEM=m ++CONFIG_USB_NET_CDC_NCM=m ++CONFIG_USB_NET_HUAWEI_CDC_NCM=m ++CONFIG_USB_NET_CDC_MBIM=m ++CONFIG_USB_NET_DM9601=m ++CONFIG_USB_NET_SR9700=m ++CONFIG_USB_NET_SR9800=m ++CONFIG_USB_NET_SMSC75XX=m ++CONFIG_USB_NET_SMSC95XX=m ++CONFIG_USB_NET_GL620A=m ++CONFIG_USB_NET_NET1080=m ++CONFIG_USB_NET_PLUSB=m ++CONFIG_USB_NET_MCS7830=m ++CONFIG_USB_NET_RNDIS_HOST=m ++CONFIG_USB_NET_CDC_SUBSET=m ++CONFIG_USB_ALI_M5632=y ++CONFIG_USB_AN2720=y ++CONFIG_USB_BELKIN=y ++CONFIG_USB_ARMLINUX=y ++CONFIG_USB_EPSON2888=y ++CONFIG_USB_KC2190=y ++CONFIG_USB_NET_ZAURUS=m ++CONFIG_USB_NET_CX82310_ETH=m ++CONFIG_USB_NET_KALMIA=m ++CONFIG_USB_NET_QMI_WWAN=m ++CONFIG_USB_HSO=m ++CONFIG_USB_NET_INT51X1=m ++CONFIG_USB_IPHETH=m ++CONFIG_USB_SIERRA_NET=m ++CONFIG_USB_VL600=m ++CONFIG_WLAN=y ++CONFIG_PCMCIA_RAYCS=m ++CONFIG_LIBERTAS_THINFIRM=m ++# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set ++CONFIG_LIBERTAS_THINFIRM_USB=m ++CONFIG_AIRO=m ++CONFIG_ATMEL=m ++CONFIG_PCI_ATMEL=m ++CONFIG_PCMCIA_ATMEL=m ++CONFIG_AT76C50X_USB=m ++CONFIG_AIRO_CS=m ++CONFIG_PCMCIA_WL3501=m ++# CONFIG_PRISM54 is not set ++CONFIG_USB_ZD1201=m ++CONFIG_USB_NET_RNDIS_WLAN=m ++CONFIG_RTL8180=m ++CONFIG_RTL8187=m ++CONFIG_RTL8187_LEDS=y ++CONFIG_ADM8211=m ++CONFIG_MAC80211_HWSIM=m ++CONFIG_MWL8K=m ++CONFIG_ATH_COMMON=m ++CONFIG_ATH_CARDS=m ++# CONFIG_ATH_DEBUG is not set ++CONFIG_ATH5K=m ++# CONFIG_ATH5K_DEBUG is not set ++CONFIG_ATH5K_PCI=y ++CONFIG_ATH9K_HW=m ++CONFIG_ATH9K_COMMON=m ++CONFIG_ATH9K_BTCOEX_SUPPORT=y ++CONFIG_ATH9K=m ++CONFIG_ATH9K_PCI=y ++CONFIG_ATH9K_AHB=y ++CONFIG_ATH9K_DEBUGFS=y ++CONFIG_ATH9K_STATION_STATISTICS=y ++# CONFIG_ATH9K_DYNACK is not set ++CONFIG_ATH9K_WOW=y ++CONFIG_ATH9K_RFKILL=y ++CONFIG_ATH9K_CHANNEL_CONTEXT=y ++CONFIG_ATH9K_HTC=m ++CONFIG_ATH9K_HTC_DEBUGFS=y ++CONFIG_CARL9170=m ++CONFIG_CARL9170_LEDS=y ++# CONFIG_CARL9170_DEBUGFS is not set ++CONFIG_CARL9170_WPC=y ++CONFIG_CARL9170_HWRNG=y ++CONFIG_ATH6KL=m ++CONFIG_ATH6KL_SDIO=m ++CONFIG_ATH6KL_USB=m ++# CONFIG_ATH6KL_DEBUG is not set ++CONFIG_AR5523=m ++CONFIG_WIL6210=m ++CONFIG_WIL6210_ISR_COR=y ++CONFIG_ATH10K=m ++CONFIG_ATH10K_PCI=m ++# CONFIG_ATH10K_DEBUG is not set ++CONFIG_ATH10K_DEBUGFS=y ++CONFIG_WCN36XX=m ++# CONFIG_WCN36XX_DEBUGFS is not set ++CONFIG_B43=m ++CONFIG_B43_BCMA=y ++CONFIG_B43_SSB=y ++CONFIG_B43_BUSES_BCMA_AND_SSB=y ++# CONFIG_B43_BUSES_BCMA is not set ++# CONFIG_B43_BUSES_SSB is not set ++CONFIG_B43_PCI_AUTOSELECT=y ++CONFIG_B43_PCICORE_AUTOSELECT=y ++# CONFIG_B43_PCMCIA is not set ++# CONFIG_B43_SDIO is not set ++CONFIG_B43_BCMA_PIO=y ++CONFIG_B43_PIO=y ++CONFIG_B43_PHY_G=y ++CONFIG_B43_PHY_N=y ++CONFIG_B43_PHY_LP=y ++CONFIG_B43_PHY_HT=y ++CONFIG_B43_LEDS=y ++CONFIG_B43_HWRNG=y ++# CONFIG_B43_DEBUG is not set ++CONFIG_B43LEGACY=m ++CONFIG_B43LEGACY_PCI_AUTOSELECT=y ++CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y ++CONFIG_B43LEGACY_LEDS=y ++CONFIG_B43LEGACY_HWRNG=y ++# CONFIG_B43LEGACY_DEBUG is not set ++CONFIG_B43LEGACY_DMA=y ++CONFIG_B43LEGACY_PIO=y ++CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y ++# CONFIG_B43LEGACY_DMA_MODE is not set ++# CONFIG_B43LEGACY_PIO_MODE is not set ++CONFIG_BRCMUTIL=m ++CONFIG_BRCMSMAC=m ++CONFIG_BRCMFMAC=m ++CONFIG_BRCMFMAC_PROTO_BCDC=y ++CONFIG_BRCMFMAC_PROTO_MSGBUF=y ++CONFIG_BRCMFMAC_SDIO=y ++CONFIG_BRCMFMAC_USB=y ++CONFIG_BRCMFMAC_PCIE=y ++CONFIG_BRCM_TRACING=y ++# CONFIG_BRCMDBG is not set ++CONFIG_HOSTAP=m ++CONFIG_HOSTAP_FIRMWARE=y ++CONFIG_HOSTAP_FIRMWARE_NVRAM=y ++CONFIG_HOSTAP_PLX=m ++CONFIG_HOSTAP_PCI=m ++CONFIG_HOSTAP_CS=m ++CONFIG_IPW2100=m ++CONFIG_IPW2100_MONITOR=y ++# CONFIG_IPW2100_DEBUG is not set ++CONFIG_IPW2200=m ++CONFIG_IPW2200_MONITOR=y ++CONFIG_IPW2200_RADIOTAP=y ++CONFIG_IPW2200_PROMISCUOUS=y ++CONFIG_IPW2200_QOS=y ++# CONFIG_IPW2200_DEBUG is not set ++CONFIG_LIBIPW=m ++# CONFIG_LIBIPW_DEBUG is not set ++CONFIG_IWLWIFI=m ++CONFIG_IWLWIFI_LEDS=y ++CONFIG_IWLDVM=m ++CONFIG_IWLMVM=m ++CONFIG_IWLWIFI_OPMODE_MODULAR=y ++# CONFIG_IWLWIFI_BCAST_FILTERING is not set ++# CONFIG_IWLWIFI_UAPSD is not set ++ ++# ++# Debugging Options ++# ++# CONFIG_IWLWIFI_DEBUG is not set ++CONFIG_IWLWIFI_DEBUGFS=y ++CONFIG_IWLEGACY=m ++CONFIG_IWL4965=m ++CONFIG_IWL3945=m ++ ++# ++# iwl3945 / iwl4965 Debugging Options ++# ++# CONFIG_IWLEGACY_DEBUG is not set ++CONFIG_IWLEGACY_DEBUGFS=y ++CONFIG_LIBERTAS=m ++CONFIG_LIBERTAS_USB=m ++CONFIG_LIBERTAS_CS=m ++CONFIG_LIBERTAS_SDIO=m ++# CONFIG_LIBERTAS_DEBUG is not set ++CONFIG_LIBERTAS_MESH=y ++CONFIG_HERMES=m ++# CONFIG_HERMES_PRISM is not set ++CONFIG_HERMES_CACHE_FW_ON_INIT=y ++CONFIG_PLX_HERMES=m ++CONFIG_TMD_HERMES=m ++CONFIG_NORTEL_HERMES=m ++CONFIG_PCMCIA_HERMES=m ++CONFIG_PCMCIA_SPECTRUM=m ++CONFIG_ORINOCO_USB=m ++CONFIG_P54_COMMON=m ++CONFIG_P54_USB=m ++CONFIG_P54_PCI=m ++CONFIG_P54_LEDS=y ++CONFIG_RT2X00=m ++CONFIG_RT2400PCI=m ++CONFIG_RT2500PCI=m ++CONFIG_RT61PCI=m ++CONFIG_RT2800PCI=m ++CONFIG_RT2800PCI_RT33XX=y ++CONFIG_RT2800PCI_RT35XX=y ++CONFIG_RT2800PCI_RT53XX=y ++CONFIG_RT2800PCI_RT3290=y ++CONFIG_RT2500USB=m ++CONFIG_RT73USB=m ++CONFIG_RT2800USB=m ++CONFIG_RT2800USB_RT33XX=y ++CONFIG_RT2800USB_RT35XX=y ++CONFIG_RT2800USB_RT3573=y ++CONFIG_RT2800USB_RT53XX=y ++CONFIG_RT2800USB_RT55XX=y ++CONFIG_RT2800USB_UNKNOWN=y ++CONFIG_RT2800_LIB=m ++CONFIG_RT2800_LIB_MMIO=m ++CONFIG_RT2X00_LIB_MMIO=m ++CONFIG_RT2X00_LIB_PCI=m ++CONFIG_RT2X00_LIB_USB=m ++CONFIG_RT2X00_LIB=m ++CONFIG_RT2X00_LIB_FIRMWARE=y ++CONFIG_RT2X00_LIB_CRYPTO=y ++CONFIG_RT2X00_LIB_LEDS=y ++# CONFIG_RT2X00_LIB_DEBUGFS is not set ++# CONFIG_RT2X00_DEBUG is not set ++CONFIG_RTL_CARDS=m ++CONFIG_RTL8192CE=m ++CONFIG_RTL8192SE=m ++CONFIG_RTL8192DE=m ++CONFIG_RTL8723AE=m ++CONFIG_RTL8723BE=m ++CONFIG_RTL8188EE=m ++CONFIG_RTL8192EE=m ++CONFIG_RTL8821AE=m ++CONFIG_RTL8192CU=m ++CONFIG_RTLWIFI=m ++CONFIG_RTLWIFI_PCI=m ++CONFIG_RTLWIFI_USB=m ++# CONFIG_RTLWIFI_DEBUG is not set ++CONFIG_RTL8192C_COMMON=m ++CONFIG_RTL8723_COMMON=m ++CONFIG_RTLBTCOEXIST=m ++CONFIG_WL_TI=y ++CONFIG_WL1251=m ++CONFIG_WL1251_SDIO=m ++CONFIG_WL12XX=m ++CONFIG_WL18XX=m ++CONFIG_WLCORE=m ++CONFIG_WLCORE_SDIO=m ++CONFIG_WILINK_PLATFORM_DATA=y ++CONFIG_ZD1211RW=m ++# CONFIG_ZD1211RW_DEBUG is not set ++CONFIG_MWIFIEX=m ++CONFIG_MWIFIEX_SDIO=m ++CONFIG_MWIFIEX_PCIE=m ++CONFIG_MWIFIEX_USB=m ++CONFIG_CW1200=m ++CONFIG_CW1200_WLAN_SDIO=m ++CONFIG_RSI_91X=m ++# CONFIG_RSI_DEBUGFS is not set ++CONFIG_RSI_SDIO=m ++CONFIG_RSI_USB=m ++ ++# ++# WiMAX Wireless Broadband devices ++# ++CONFIG_WIMAX_I2400M=m ++CONFIG_WIMAX_I2400M_USB=m ++CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8 ++# CONFIG_WAN is not set ++CONFIG_XEN_NETDEV_FRONTEND=y ++CONFIG_XEN_NETDEV_BACKEND=m ++CONFIG_VMXNET3=m ++CONFIG_HYPERV_NET=m ++# CONFIG_ISDN is not set ++ ++# ++# Input device support ++# ++CONFIG_INPUT=y ++CONFIG_INPUT_FF_MEMLESS=m ++CONFIG_INPUT_POLLDEV=m ++CONFIG_INPUT_SPARSEKMAP=m ++CONFIG_INPUT_MATRIXKMAP=m ++ ++# ++# Userland interfaces ++# ++CONFIG_INPUT_MOUSEDEV=y ++CONFIG_INPUT_MOUSEDEV_PSAUX=y ++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 ++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 ++# CONFIG_INPUT_JOYDEV is not set ++CONFIG_INPUT_EVDEV=y ++CONFIG_INPUT_EVBUG=m ++ ++# ++# Input Device Drivers ++# ++CONFIG_INPUT_KEYBOARD=y ++CONFIG_KEYBOARD_ADP5520=m ++CONFIG_KEYBOARD_ADP5588=m ++CONFIG_KEYBOARD_ADP5589=m ++CONFIG_KEYBOARD_ATKBD=y ++CONFIG_KEYBOARD_QT1070=m ++CONFIG_KEYBOARD_QT2160=m ++CONFIG_KEYBOARD_LKKBD=m ++CONFIG_KEYBOARD_GPIO=m ++CONFIG_KEYBOARD_GPIO_POLLED=m ++CONFIG_KEYBOARD_TCA6416=m ++CONFIG_KEYBOARD_TCA8418=m ++CONFIG_KEYBOARD_MATRIX=m ++CONFIG_KEYBOARD_LM8323=m ++CONFIG_KEYBOARD_LM8333=m ++CONFIG_KEYBOARD_MAX7359=m ++CONFIG_KEYBOARD_MCS=m ++CONFIG_KEYBOARD_MPR121=m ++CONFIG_KEYBOARD_NEWTON=m ++CONFIG_KEYBOARD_OPENCORES=m ++CONFIG_KEYBOARD_SAMSUNG=m ++CONFIG_KEYBOARD_STOWAWAY=m ++CONFIG_KEYBOARD_SUNKBD=m ++CONFIG_KEYBOARD_TC3589X=m ++CONFIG_KEYBOARD_TWL4030=m ++CONFIG_KEYBOARD_XTKBD=m ++CONFIG_KEYBOARD_CROS_EC=m ++CONFIG_INPUT_MOUSE=y ++CONFIG_MOUSE_PS2=m ++CONFIG_MOUSE_PS2_ALPS=y ++CONFIG_MOUSE_PS2_LOGIPS2PP=y ++CONFIG_MOUSE_PS2_SYNAPTICS=y ++CONFIG_MOUSE_PS2_CYPRESS=y ++CONFIG_MOUSE_PS2_LIFEBOOK=y ++CONFIG_MOUSE_PS2_TRACKPOINT=y ++CONFIG_MOUSE_PS2_ELANTECH=y ++CONFIG_MOUSE_PS2_SENTELIC=y ++CONFIG_MOUSE_PS2_TOUCHKIT=y ++CONFIG_MOUSE_SERIAL=m ++CONFIG_MOUSE_APPLETOUCH=m ++CONFIG_MOUSE_BCM5974=m ++CONFIG_MOUSE_CYAPA=m ++CONFIG_MOUSE_VSXXXAA=m ++CONFIG_MOUSE_GPIO=m ++CONFIG_MOUSE_SYNAPTICS_I2C=m ++CONFIG_MOUSE_SYNAPTICS_USB=m ++# CONFIG_INPUT_JOYSTICK is not set ++# CONFIG_INPUT_TABLET is not set ++# CONFIG_INPUT_TOUCHSCREEN is not set ++# CONFIG_INPUT_MISC is not set ++ ++# ++# Hardware I/O ports ++# ++CONFIG_SERIO=y ++CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y ++CONFIG_SERIO_I8042=y ++CONFIG_SERIO_SERPORT=m ++CONFIG_SERIO_CT82C710=m ++CONFIG_SERIO_PARKBD=m ++CONFIG_SERIO_PCIPS2=m ++CONFIG_SERIO_LIBPS2=y ++CONFIG_SERIO_RAW=m ++CONFIG_SERIO_ALTERA_PS2=m ++CONFIG_SERIO_PS2MULT=m ++CONFIG_SERIO_ARC_PS2=m ++CONFIG_HYPERV_KEYBOARD=m ++CONFIG_GAMEPORT=m ++CONFIG_GAMEPORT_NS558=m ++CONFIG_GAMEPORT_L4=m ++CONFIG_GAMEPORT_EMU10K1=m ++CONFIG_GAMEPORT_FM801=m ++ ++# ++# Character devices ++# ++CONFIG_TTY=y ++CONFIG_VT=y ++CONFIG_CONSOLE_TRANSLATIONS=y ++CONFIG_VT_CONSOLE=y ++CONFIG_VT_CONSOLE_SLEEP=y ++CONFIG_HW_CONSOLE=y ++CONFIG_VT_HW_CONSOLE_BINDING=y ++CONFIG_UNIX98_PTYS=y ++CONFIG_DEVPTS_MULTIPLE_INSTANCES=y ++CONFIG_LEGACY_PTYS=y ++CONFIG_LEGACY_PTY_COUNT=0 ++# CONFIG_SERIAL_NONSTANDARD is not set ++# CONFIG_NOZOMI is not set ++# CONFIG_N_GSM is not set ++# CONFIG_TRACE_SINK is not set ++# CONFIG_DEVKMEM is not set ++ ++# ++# Serial drivers ++# ++CONFIG_SERIAL_EARLYCON=y ++CONFIG_SERIAL_8250=y ++# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set ++CONFIG_SERIAL_8250_PNP=y ++CONFIG_SERIAL_8250_CONSOLE=y ++CONFIG_SERIAL_8250_DMA=y ++CONFIG_SERIAL_8250_PCI=y ++CONFIG_SERIAL_8250_CS=m ++CONFIG_SERIAL_8250_NR_UARTS=48 ++CONFIG_SERIAL_8250_RUNTIME_UARTS=32 ++CONFIG_SERIAL_8250_EXTENDED=y ++CONFIG_SERIAL_8250_MANY_PORTS=y ++CONFIG_SERIAL_8250_SHARE_IRQ=y ++# CONFIG_SERIAL_8250_DETECT_IRQ is not set ++CONFIG_SERIAL_8250_RSA=y ++CONFIG_SERIAL_8250_DW=m ++CONFIG_SERIAL_8250_FINTEK=m ++ ++# ++# Non-8250 serial port support ++# ++CONFIG_SERIAL_KGDB_NMI=y ++# CONFIG_SERIAL_MFD_HSU is not set ++CONFIG_SERIAL_CORE=y ++CONFIG_SERIAL_CORE_CONSOLE=y ++CONFIG_CONSOLE_POLL=y ++# CONFIG_SERIAL_JSM is not set ++# CONFIG_SERIAL_SCCNXP is not set ++# CONFIG_SERIAL_SC16IS7XX is not set ++# CONFIG_SERIAL_ALTERA_JTAGUART is not set ++# CONFIG_SERIAL_ALTERA_UART is not set ++# CONFIG_SERIAL_ARC is not set ++# CONFIG_SERIAL_RP2 is not set ++# CONFIG_SERIAL_FSL_LPUART is not set ++CONFIG_TTY_PRINTK=y ++# CONFIG_PRINTER is not set ++# CONFIG_PPDEV is not set ++CONFIG_HVC_DRIVER=y ++CONFIG_HVC_IRQ=y ++CONFIG_HVC_XEN=y ++CONFIG_HVC_XEN_FRONTEND=y ++CONFIG_VIRTIO_CONSOLE=y ++CONFIG_IPMI_HANDLER=m ++# CONFIG_IPMI_PANIC_EVENT is not set ++CONFIG_IPMI_DEVICE_INTERFACE=m ++CONFIG_IPMI_SI=m ++CONFIG_IPMI_SI_PROBE_DEFAULTS=y ++CONFIG_IPMI_WATCHDOG=m ++CONFIG_IPMI_POWEROFF=m ++CONFIG_HW_RANDOM=y ++CONFIG_HW_RANDOM_TIMERIOMEM=m ++CONFIG_HW_RANDOM_INTEL=m ++CONFIG_HW_RANDOM_AMD=m ++CONFIG_HW_RANDOM_VIA=m ++CONFIG_HW_RANDOM_VIRTIO=m ++CONFIG_HW_RANDOM_TPM=m ++CONFIG_NVRAM=m ++# CONFIG_R3964 is not set ++# CONFIG_APPLICOM is not set ++ ++# ++# PCMCIA character devices ++# ++# CONFIG_SYNCLINK_CS is not set ++# CONFIG_CARDMAN_4000 is not set ++# CONFIG_CARDMAN_4040 is not set ++# CONFIG_IPWIRELESS is not set ++# CONFIG_MWAVE is not set ++CONFIG_RAW_DRIVER=m ++CONFIG_MAX_RAW_DEVS=256 ++CONFIG_HPET=y ++CONFIG_HPET_MMAP=y ++CONFIG_HPET_MMAP_DEFAULT=y ++CONFIG_HANGCHECK_TIMER=m ++CONFIG_TCG_TPM=y ++CONFIG_TCG_TIS=y ++CONFIG_TCG_TIS_I2C_ATMEL=m ++CONFIG_TCG_TIS_I2C_INFINEON=m ++CONFIG_TCG_TIS_I2C_NUVOTON=m ++CONFIG_TCG_NSC=m ++CONFIG_TCG_ATMEL=m ++CONFIG_TCG_INFINEON=m ++CONFIG_TCG_ST33_I2C=m ++CONFIG_TCG_XEN=m ++# CONFIG_TELCLOCK is not set ++CONFIG_DEVPORT=y ++# CONFIG_XILLYBUS is not set ++ ++# ++# I2C support ++# ++CONFIG_I2C=y ++CONFIG_ACPI_I2C_OPREGION=y ++CONFIG_I2C_BOARDINFO=y ++CONFIG_I2C_COMPAT=y ++CONFIG_I2C_CHARDEV=y ++CONFIG_I2C_MUX=m ++ ++# ++# Multiplexer I2C Chip support ++# ++CONFIG_I2C_MUX_GPIO=m ++CONFIG_I2C_MUX_PCA9541=m ++CONFIG_I2C_MUX_PCA954x=m ++CONFIG_I2C_MUX_PINCTRL=m ++CONFIG_I2C_HELPER_AUTO=y ++CONFIG_I2C_SMBUS=m ++CONFIG_I2C_ALGOBIT=m ++ ++# ++# I2C Hardware Bus support ++# ++ ++# ++# PC SMBus host controller drivers ++# ++CONFIG_I2C_ALI1535=m ++CONFIG_I2C_ALI1563=m ++CONFIG_I2C_ALI15X3=m ++CONFIG_I2C_AMD756=m ++CONFIG_I2C_AMD756_S4882=m ++CONFIG_I2C_AMD8111=m ++CONFIG_I2C_I801=m ++CONFIG_I2C_ISCH=m ++CONFIG_I2C_ISMT=m ++CONFIG_I2C_PIIX4=m ++CONFIG_I2C_NFORCE2=m ++CONFIG_I2C_NFORCE2_S4985=m ++CONFIG_I2C_SIS5595=m ++CONFIG_I2C_SIS630=m ++CONFIG_I2C_SIS96X=m ++CONFIG_I2C_VIA=m ++CONFIG_I2C_VIAPRO=m ++ ++# ++# ACPI drivers ++# ++CONFIG_I2C_SCMI=m ++ ++# ++# I2C system bus drivers (mostly embedded / system-on-chip) ++# ++# CONFIG_I2C_CBUS_GPIO is not set ++# CONFIG_I2C_DESIGNWARE_PLATFORM is not set ++# CONFIG_I2C_DESIGNWARE_PCI is not set ++# CONFIG_I2C_GPIO is not set ++# CONFIG_I2C_KEMPLD is not set ++# CONFIG_I2C_OCORES is not set ++# CONFIG_I2C_PCA_PLATFORM is not set ++# CONFIG_I2C_PXA_PCI is not set ++# CONFIG_I2C_SIMTEC is not set ++# CONFIG_I2C_XILINX is not set ++ ++# ++# External I2C/SMBus adapter drivers ++# ++CONFIG_I2C_DIOLAN_U2C=m ++CONFIG_I2C_PARPORT=m ++CONFIG_I2C_PARPORT_LIGHT=m ++CONFIG_I2C_ROBOTFUZZ_OSIF=m ++CONFIG_I2C_TAOS_EVM=m ++CONFIG_I2C_TINY_USB=m ++CONFIG_I2C_VIPERBOARD=m ++ ++# ++# Other I2C/SMBus bus drivers ++# ++# CONFIG_I2C_CROS_EC_TUNNEL is not set ++# CONFIG_I2C_STUB is not set ++# CONFIG_I2C_DEBUG_CORE is not set ++# CONFIG_I2C_DEBUG_ALGO is not set ++# CONFIG_I2C_DEBUG_BUS is not set ++# CONFIG_SPI is not set ++CONFIG_SPMI=m ++CONFIG_HSI=m ++CONFIG_HSI_BOARDINFO=y ++ ++# ++# HSI controllers ++# ++ ++# ++# HSI clients ++# ++CONFIG_HSI_CHAR=m ++ ++# ++# PPS support ++# ++CONFIG_PPS=m ++# CONFIG_PPS_DEBUG is not set ++ ++# ++# PPS clients support ++# ++# CONFIG_PPS_CLIENT_KTIMER is not set ++# CONFIG_PPS_CLIENT_LDISC is not set ++# CONFIG_PPS_CLIENT_PARPORT is not set ++# CONFIG_PPS_CLIENT_GPIO is not set ++ ++# ++# PPS generators support ++# ++ ++# ++# PTP clock support ++# ++CONFIG_PTP_1588_CLOCK=m ++ ++# ++# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. ++# ++CONFIG_PINCTRL=y ++ ++# ++# Pin controllers ++# ++# CONFIG_DEBUG_PINCTRL is not set ++# CONFIG_PINCTRL_BAYTRAIL is not set ++CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y ++CONFIG_GPIOLIB=y ++CONFIG_GPIO_DEVRES=y ++CONFIG_GPIO_ACPI=y ++CONFIG_GPIOLIB_IRQCHIP=y ++# CONFIG_DEBUG_GPIO is not set ++CONFIG_GPIO_SYSFS=y ++CONFIG_GPIO_GENERIC=m ++CONFIG_GPIO_DA9052=m ++CONFIG_GPIO_DA9055=m ++CONFIG_GPIO_MAX730X=m ++ ++# ++# Memory mapped GPIO drivers: ++# ++CONFIG_GPIO_GENERIC_PLATFORM=m ++# CONFIG_GPIO_DWAPB is not set ++CONFIG_GPIO_IT8761E=m ++CONFIG_GPIO_F7188X=m ++CONFIG_GPIO_SCH311X=m ++CONFIG_GPIO_SCH=m ++CONFIG_GPIO_ICH=m ++CONFIG_GPIO_VX855=m ++CONFIG_GPIO_LYNXPOINT=y ++ ++# ++# I2C GPIO expanders: ++# ++CONFIG_GPIO_ARIZONA=m ++CONFIG_GPIO_CRYSTAL_COVE=m ++CONFIG_GPIO_LP3943=m ++CONFIG_GPIO_MAX7300=m ++CONFIG_GPIO_MAX732X=m ++CONFIG_GPIO_PCA953X=m ++CONFIG_GPIO_PCF857X=m ++CONFIG_GPIO_RC5T583=y ++CONFIG_GPIO_SX150X=y ++CONFIG_GPIO_TC3589X=y ++CONFIG_GPIO_TPS65912=m ++CONFIG_GPIO_TWL4030=m ++CONFIG_GPIO_TWL6040=m ++CONFIG_GPIO_WM831X=m ++CONFIG_GPIO_WM8350=m ++CONFIG_GPIO_WM8994=m ++CONFIG_GPIO_ADP5520=m ++CONFIG_GPIO_ADP5588=m ++ ++# ++# PCI GPIO expanders: ++# ++CONFIG_GPIO_AMD8111=m ++CONFIG_GPIO_INTEL_MID=y ++CONFIG_GPIO_ML_IOH=m ++CONFIG_GPIO_RDC321X=m ++ ++# ++# SPI GPIO expanders: ++# ++CONFIG_GPIO_MCP23S08=m ++ ++# ++# AC97 GPIO expanders: ++# ++CONFIG_GPIO_UCB1400=m ++ ++# ++# LPC GPIO expanders: ++# ++# CONFIG_GPIO_KEMPLD is not set ++ ++# ++# MODULbus GPIO expanders: ++# ++# CONFIG_GPIO_JANZ_TTL is not set ++# CONFIG_GPIO_PALMAS is not set ++# CONFIG_GPIO_TPS6586X is not set ++# CONFIG_GPIO_TPS65910 is not set ++ ++# ++# USB GPIO expanders: ++# ++CONFIG_GPIO_VIPERBOARD=m ++CONFIG_W1=m ++CONFIG_W1_CON=y ++ ++# ++# 1-wire Bus Masters ++# ++# CONFIG_W1_MASTER_MATROX is not set ++CONFIG_W1_MASTER_DS2490=m ++CONFIG_W1_MASTER_DS2482=m ++CONFIG_W1_MASTER_DS1WM=m ++CONFIG_W1_MASTER_GPIO=m ++ ++# ++# 1-wire Slaves ++# ++CONFIG_W1_SLAVE_THERM=m ++CONFIG_W1_SLAVE_SMEM=m ++CONFIG_W1_SLAVE_DS2408=m ++CONFIG_W1_SLAVE_DS2408_READBACK=y ++CONFIG_W1_SLAVE_DS2413=m ++CONFIG_W1_SLAVE_DS2406=m ++CONFIG_W1_SLAVE_DS2423=m ++CONFIG_W1_SLAVE_DS2431=m ++CONFIG_W1_SLAVE_DS2433=m ++# CONFIG_W1_SLAVE_DS2433_CRC is not set ++CONFIG_W1_SLAVE_DS2760=m ++CONFIG_W1_SLAVE_DS2780=m ++CONFIG_W1_SLAVE_DS2781=m ++CONFIG_W1_SLAVE_DS28E04=m ++CONFIG_W1_SLAVE_BQ27000=m ++CONFIG_POWER_SUPPLY=y ++# CONFIG_POWER_SUPPLY_DEBUG is not set ++# CONFIG_PDA_POWER is not set ++CONFIG_GENERIC_ADC_BATTERY=m ++# CONFIG_MAX8925_POWER is not set ++# CONFIG_WM831X_BACKUP is not set ++# CONFIG_WM831X_POWER is not set ++# CONFIG_WM8350_POWER is not set ++# CONFIG_TEST_POWER is not set ++# CONFIG_BATTERY_88PM860X is not set ++# CONFIG_BATTERY_DS2760 is not set ++# CONFIG_BATTERY_DS2780 is not set ++# CONFIG_BATTERY_DS2781 is not set ++# CONFIG_BATTERY_DS2782 is not set ++# CONFIG_BATTERY_SBS is not set ++# CONFIG_BATTERY_BQ27x00 is not set ++# CONFIG_BATTERY_DA9030 is not set ++# CONFIG_BATTERY_DA9052 is not set ++# CONFIG_BATTERY_MAX17040 is not set ++# CONFIG_BATTERY_MAX17042 is not set ++# CONFIG_CHARGER_PCF50633 is not set ++# CONFIG_CHARGER_ISP1704 is not set ++# CONFIG_CHARGER_MAX8903 is not set ++# CONFIG_CHARGER_TWL4030 is not set ++# CONFIG_CHARGER_LP8727 is not set ++CONFIG_CHARGER_GPIO=m ++CONFIG_CHARGER_MANAGER=y ++# CONFIG_CHARGER_MAX14577 is not set ++# CONFIG_CHARGER_BQ2415X is not set ++# CONFIG_CHARGER_BQ24190 is not set ++# CONFIG_CHARGER_BQ24735 is not set ++# CONFIG_CHARGER_SMB347 is not set ++# CONFIG_CHARGER_TPS65090 is not set ++# CONFIG_POWER_RESET is not set ++CONFIG_POWER_AVS=y ++CONFIG_HWMON=m ++CONFIG_HWMON_VID=m ++# CONFIG_HWMON_DEBUG_CHIP is not set ++ ++# ++# Native drivers ++# ++CONFIG_SENSORS_ABITUGURU=m ++CONFIG_SENSORS_ABITUGURU3=m ++CONFIG_SENSORS_AD7414=m ++CONFIG_SENSORS_AD7418=m ++CONFIG_SENSORS_ADM1021=m ++CONFIG_SENSORS_ADM1025=m ++CONFIG_SENSORS_ADM1026=m ++CONFIG_SENSORS_ADM1029=m ++CONFIG_SENSORS_ADM1031=m ++CONFIG_SENSORS_ADM9240=m ++CONFIG_SENSORS_ADT7X10=m ++CONFIG_SENSORS_ADT7410=m ++CONFIG_SENSORS_ADT7411=m ++CONFIG_SENSORS_ADT7462=m ++CONFIG_SENSORS_ADT7470=m ++CONFIG_SENSORS_ADT7475=m ++CONFIG_SENSORS_ASC7621=m ++CONFIG_SENSORS_K8TEMP=m ++CONFIG_SENSORS_K10TEMP=m ++CONFIG_SENSORS_FAM15H_POWER=m ++CONFIG_SENSORS_APPLESMC=m ++CONFIG_SENSORS_ASB100=m ++CONFIG_SENSORS_ATXP1=m ++CONFIG_SENSORS_DS620=m ++CONFIG_SENSORS_DS1621=m ++CONFIG_SENSORS_DA9052_ADC=m ++CONFIG_SENSORS_DA9055=m ++CONFIG_SENSORS_I5K_AMB=m ++CONFIG_SENSORS_F71805F=m ++CONFIG_SENSORS_F71882FG=m ++CONFIG_SENSORS_F75375S=m ++CONFIG_SENSORS_MC13783_ADC=m ++CONFIG_SENSORS_FSCHMD=m ++CONFIG_SENSORS_GL518SM=m ++CONFIG_SENSORS_GL520SM=m ++CONFIG_SENSORS_G760A=m ++CONFIG_SENSORS_G762=m ++CONFIG_SENSORS_GPIO_FAN=m ++CONFIG_SENSORS_HIH6130=m ++CONFIG_SENSORS_IBMAEM=m ++CONFIG_SENSORS_IBMPEX=m ++CONFIG_SENSORS_IIO_HWMON=m ++CONFIG_SENSORS_CORETEMP=m ++CONFIG_SENSORS_IT87=m ++CONFIG_SENSORS_JC42=m ++CONFIG_SENSORS_POWR1220=m ++CONFIG_SENSORS_LINEAGE=m ++CONFIG_SENSORS_LTC2945=m ++CONFIG_SENSORS_LTC4151=m ++CONFIG_SENSORS_LTC4215=m ++CONFIG_SENSORS_LTC4222=m ++CONFIG_SENSORS_LTC4245=m ++CONFIG_SENSORS_LTC4260=m ++CONFIG_SENSORS_LTC4261=m ++CONFIG_SENSORS_MAX16065=m ++CONFIG_SENSORS_MAX1619=m ++CONFIG_SENSORS_MAX1668=m ++CONFIG_SENSORS_MAX197=m ++CONFIG_SENSORS_MAX6639=m ++CONFIG_SENSORS_MAX6642=m ++CONFIG_SENSORS_MAX6650=m ++CONFIG_SENSORS_MAX6697=m ++CONFIG_SENSORS_HTU21=m ++CONFIG_SENSORS_MCP3021=m ++CONFIG_SENSORS_MENF21BMC_HWMON=m ++CONFIG_SENSORS_LM63=m ++CONFIG_SENSORS_LM73=m ++CONFIG_SENSORS_LM75=m ++CONFIG_SENSORS_LM77=m ++CONFIG_SENSORS_LM78=m ++CONFIG_SENSORS_LM80=m ++CONFIG_SENSORS_LM83=m ++CONFIG_SENSORS_LM85=m ++CONFIG_SENSORS_LM87=m ++CONFIG_SENSORS_LM90=m ++CONFIG_SENSORS_LM92=m ++CONFIG_SENSORS_LM93=m ++CONFIG_SENSORS_LM95234=m ++CONFIG_SENSORS_LM95241=m ++CONFIG_SENSORS_LM95245=m ++CONFIG_SENSORS_PC87360=m ++CONFIG_SENSORS_PC87427=m ++CONFIG_SENSORS_NTC_THERMISTOR=m ++CONFIG_SENSORS_NCT6683=m ++CONFIG_SENSORS_NCT6775=m ++CONFIG_SENSORS_PCF8591=m ++CONFIG_PMBUS=m ++CONFIG_SENSORS_PMBUS=m ++CONFIG_SENSORS_ADM1275=m ++CONFIG_SENSORS_LM25066=m ++CONFIG_SENSORS_LTC2978=m ++CONFIG_SENSORS_MAX16064=m ++CONFIG_SENSORS_MAX34440=m ++CONFIG_SENSORS_MAX8688=m ++CONFIG_SENSORS_TPS40422=m ++CONFIG_SENSORS_UCD9000=m ++CONFIG_SENSORS_UCD9200=m ++CONFIG_SENSORS_ZL6100=m ++CONFIG_SENSORS_SHT15=m ++CONFIG_SENSORS_SHT21=m ++CONFIG_SENSORS_SHTC1=m ++CONFIG_SENSORS_SIS5595=m ++CONFIG_SENSORS_DME1737=m ++CONFIG_SENSORS_EMC1403=m ++CONFIG_SENSORS_EMC2103=m ++CONFIG_SENSORS_EMC6W201=m ++CONFIG_SENSORS_SMSC47M1=m ++CONFIG_SENSORS_SMSC47M192=m ++CONFIG_SENSORS_SMSC47B397=m ++# CONFIG_SENSORS_SCH56XX_COMMON is not set ++CONFIG_SENSORS_SMM665=m ++CONFIG_SENSORS_ADC128D818=m ++CONFIG_SENSORS_ADS1015=m ++CONFIG_SENSORS_ADS7828=m ++CONFIG_SENSORS_AMC6821=m ++CONFIG_SENSORS_INA209=m ++CONFIG_SENSORS_INA2XX=m ++CONFIG_SENSORS_THMC50=m ++CONFIG_SENSORS_TMP102=m ++CONFIG_SENSORS_TMP103=m ++CONFIG_SENSORS_TMP401=m ++CONFIG_SENSORS_TMP421=m ++CONFIG_SENSORS_VIA_CPUTEMP=m ++CONFIG_SENSORS_VIA686A=m ++CONFIG_SENSORS_VT1211=m ++CONFIG_SENSORS_VT8231=m ++CONFIG_SENSORS_W83781D=m ++CONFIG_SENSORS_W83791D=m ++CONFIG_SENSORS_W83792D=m ++CONFIG_SENSORS_W83793=m ++CONFIG_SENSORS_W83795=m ++# CONFIG_SENSORS_W83795_FANCTRL is not set ++CONFIG_SENSORS_W83L785TS=m ++CONFIG_SENSORS_W83L786NG=m ++CONFIG_SENSORS_W83627HF=m ++CONFIG_SENSORS_W83627EHF=m ++CONFIG_SENSORS_WM831X=m ++CONFIG_SENSORS_WM8350=m ++ ++# ++# ACPI drivers ++# ++CONFIG_SENSORS_ACPI_POWER=m ++CONFIG_SENSORS_ATK0110=m ++CONFIG_THERMAL=y ++CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y ++# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set ++# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set ++CONFIG_THERMAL_GOV_FAIR_SHARE=y ++CONFIG_THERMAL_GOV_STEP_WISE=y ++CONFIG_THERMAL_GOV_BANG_BANG=y ++CONFIG_THERMAL_GOV_USER_SPACE=y ++CONFIG_THERMAL_EMULATION=y ++CONFIG_INTEL_POWERCLAMP=m ++CONFIG_X86_PKG_TEMP_THERMAL=m ++CONFIG_INTEL_SOC_DTS_THERMAL=m ++CONFIG_INT340X_THERMAL=m ++CONFIG_ACPI_THERMAL_REL=m ++ ++# ++# Texas Instruments thermal drivers ++# ++# CONFIG_WATCHDOG is not set ++CONFIG_SSB_POSSIBLE=y ++ ++# ++# Sonics Silicon Backplane ++# ++CONFIG_SSB=m ++CONFIG_SSB_SPROM=y ++CONFIG_SSB_BLOCKIO=y ++CONFIG_SSB_PCIHOST_POSSIBLE=y ++CONFIG_SSB_PCIHOST=y ++CONFIG_SSB_B43_PCI_BRIDGE=y ++CONFIG_SSB_PCMCIAHOST_POSSIBLE=y ++# CONFIG_SSB_PCMCIAHOST is not set ++CONFIG_SSB_SDIOHOST_POSSIBLE=y ++# CONFIG_SSB_SDIOHOST is not set ++# CONFIG_SSB_SILENT is not set ++# CONFIG_SSB_DEBUG is not set ++CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y ++CONFIG_SSB_DRIVER_PCICORE=y ++# CONFIG_SSB_DRIVER_GPIO is not set ++CONFIG_BCMA_POSSIBLE=y ++ ++# ++# Broadcom specific AMBA ++# ++CONFIG_BCMA=m ++CONFIG_BCMA_BLOCKIO=y ++CONFIG_BCMA_HOST_PCI_POSSIBLE=y ++# CONFIG_BCMA_HOST_PCI is not set ++# CONFIG_BCMA_HOST_SOC is not set ++# CONFIG_BCMA_DRIVER_GMAC_CMN is not set ++# CONFIG_BCMA_DRIVER_GPIO is not set ++# CONFIG_BCMA_DEBUG is not set ++ ++# ++# Multifunction device drivers ++# ++CONFIG_MFD_CORE=y ++CONFIG_MFD_AS3711=y ++CONFIG_PMIC_ADP5520=y ++CONFIG_MFD_AAT2870_CORE=y ++CONFIG_MFD_BCM590XX=m ++CONFIG_MFD_AXP20X=y ++CONFIG_MFD_CROS_EC=m ++CONFIG_MFD_CROS_EC_I2C=m ++CONFIG_PMIC_DA903X=y ++CONFIG_PMIC_DA9052=y ++CONFIG_MFD_DA9052_I2C=y ++CONFIG_MFD_DA9055=y ++CONFIG_MFD_DA9063=y ++CONFIG_MFD_MC13XXX=m ++CONFIG_MFD_MC13XXX_I2C=m ++CONFIG_HTC_PASIC3=m ++CONFIG_HTC_I2CPLD=y ++CONFIG_LPC_ICH=m ++CONFIG_LPC_SCH=m ++CONFIG_INTEL_SOC_PMIC=y ++CONFIG_MFD_JANZ_CMODIO=m ++CONFIG_MFD_KEMPLD=m ++CONFIG_MFD_88PM800=m ++CONFIG_MFD_88PM805=m ++CONFIG_MFD_88PM860X=y ++CONFIG_MFD_MAX14577=y ++CONFIG_MFD_MAX77686=y ++CONFIG_MFD_MAX77693=y ++CONFIG_MFD_MAX8907=m ++CONFIG_MFD_MAX8925=y ++CONFIG_MFD_MAX8997=y ++CONFIG_MFD_MAX8998=y ++CONFIG_MFD_MENF21BMC=m ++CONFIG_MFD_VIPERBOARD=m ++CONFIG_MFD_RETU=m ++CONFIG_MFD_PCF50633=m ++CONFIG_PCF50633_ADC=m ++CONFIG_PCF50633_GPIO=m ++CONFIG_UCB1400_CORE=m ++CONFIG_MFD_RDC321X=m ++CONFIG_MFD_RTSX_PCI=m ++CONFIG_MFD_RTSX_USB=m ++CONFIG_MFD_RC5T583=y ++CONFIG_MFD_RN5T618=m ++CONFIG_MFD_SEC_CORE=y ++CONFIG_MFD_SI476X_CORE=m ++CONFIG_MFD_SM501=m ++CONFIG_MFD_SM501_GPIO=y ++CONFIG_MFD_SMSC=y ++CONFIG_ABX500_CORE=y ++CONFIG_AB3100_CORE=y ++CONFIG_AB3100_OTP=m ++CONFIG_MFD_SYSCON=y ++CONFIG_MFD_TI_AM335X_TSCADC=m ++CONFIG_MFD_LP3943=m ++CONFIG_MFD_LP8788=y ++CONFIG_MFD_PALMAS=y ++CONFIG_TPS6105X=m ++CONFIG_TPS65010=m ++CONFIG_TPS6507X=m ++CONFIG_MFD_TPS65090=y ++CONFIG_MFD_TPS65217=m ++CONFIG_MFD_TPS65218=m ++CONFIG_MFD_TPS6586X=y ++CONFIG_MFD_TPS65910=y ++CONFIG_MFD_TPS65912=y ++CONFIG_MFD_TPS65912_I2C=y ++CONFIG_MFD_TPS80031=y ++CONFIG_TWL4030_CORE=y ++CONFIG_MFD_TWL4030_AUDIO=y ++CONFIG_TWL6040_CORE=y ++CONFIG_MFD_WL1273_CORE=m ++CONFIG_MFD_LM3533=m ++CONFIG_MFD_TC3589X=y ++# CONFIG_MFD_TMIO is not set ++CONFIG_MFD_VX855=m ++CONFIG_MFD_ARIZONA=y ++CONFIG_MFD_ARIZONA_I2C=m ++CONFIG_MFD_WM5102=y ++CONFIG_MFD_WM5110=y ++CONFIG_MFD_WM8997=y ++CONFIG_MFD_WM8400=y ++CONFIG_MFD_WM831X=y ++CONFIG_MFD_WM831X_I2C=y ++CONFIG_MFD_WM8350=y ++CONFIG_MFD_WM8350_I2C=y ++CONFIG_MFD_WM8994=m ++CONFIG_REGULATOR=y ++# CONFIG_REGULATOR_DEBUG is not set ++CONFIG_REGULATOR_FIXED_VOLTAGE=m ++CONFIG_REGULATOR_VIRTUAL_CONSUMER=m ++CONFIG_REGULATOR_USERSPACE_CONSUMER=m ++# CONFIG_REGULATOR_88PM800 is not set ++# CONFIG_REGULATOR_88PM8607 is not set ++# CONFIG_REGULATOR_ACT8865 is not set ++# CONFIG_REGULATOR_AD5398 is not set ++# CONFIG_REGULATOR_ANATOP is not set ++# CONFIG_REGULATOR_AAT2870 is not set ++# CONFIG_REGULATOR_AB3100 is not set ++# CONFIG_REGULATOR_AS3711 is not set ++# CONFIG_REGULATOR_AXP20X is not set ++# CONFIG_REGULATOR_BCM590XX is not set ++# CONFIG_REGULATOR_DA903X is not set ++# CONFIG_REGULATOR_DA9052 is not set ++# CONFIG_REGULATOR_DA9055 is not set ++# CONFIG_REGULATOR_DA9063 is not set ++# CONFIG_REGULATOR_DA9210 is not set ++# CONFIG_REGULATOR_DA9211 is not set ++# CONFIG_REGULATOR_FAN53555 is not set ++CONFIG_REGULATOR_GPIO=m ++# CONFIG_REGULATOR_ISL9305 is not set ++# CONFIG_REGULATOR_ISL6271A is not set ++# CONFIG_REGULATOR_LP3971 is not set ++# CONFIG_REGULATOR_LP3972 is not set ++# CONFIG_REGULATOR_LP872X is not set ++# CONFIG_REGULATOR_LP8755 is not set ++# CONFIG_REGULATOR_LP8788 is not set ++# CONFIG_REGULATOR_LTC3589 is not set ++# CONFIG_REGULATOR_MAX14577 is not set ++# CONFIG_REGULATOR_MAX1586 is not set ++# CONFIG_REGULATOR_MAX8649 is not set ++# CONFIG_REGULATOR_MAX8660 is not set ++# CONFIG_REGULATOR_MAX8907 is not set ++# CONFIG_REGULATOR_MAX8925 is not set ++# CONFIG_REGULATOR_MAX8952 is not set ++# CONFIG_REGULATOR_MAX8973 is not set ++# CONFIG_REGULATOR_MAX8997 is not set ++# CONFIG_REGULATOR_MAX8998 is not set ++# CONFIG_REGULATOR_MAX77686 is not set ++# CONFIG_REGULATOR_MAX77693 is not set ++# CONFIG_REGULATOR_MAX77802 is not set ++# CONFIG_REGULATOR_MC13783 is not set ++# CONFIG_REGULATOR_MC13892 is not set ++# CONFIG_REGULATOR_PALMAS is not set ++# CONFIG_REGULATOR_PCF50633 is not set ++# CONFIG_REGULATOR_PFUZE100 is not set ++# CONFIG_REGULATOR_RC5T583 is not set ++# CONFIG_REGULATOR_RN5T618 is not set ++# CONFIG_REGULATOR_S2MPA01 is not set ++# CONFIG_REGULATOR_S2MPS11 is not set ++# CONFIG_REGULATOR_S5M8767 is not set ++# CONFIG_REGULATOR_TPS51632 is not set ++# CONFIG_REGULATOR_TPS6105X is not set ++# CONFIG_REGULATOR_TPS62360 is not set ++# CONFIG_REGULATOR_TPS65023 is not set ++# CONFIG_REGULATOR_TPS6507X is not set ++# CONFIG_REGULATOR_TPS65090 is not set ++# CONFIG_REGULATOR_TPS65217 is not set ++# CONFIG_REGULATOR_TPS6586X is not set ++# CONFIG_REGULATOR_TPS65910 is not set ++# CONFIG_REGULATOR_TPS65912 is not set ++# CONFIG_REGULATOR_TPS80031 is not set ++# CONFIG_REGULATOR_TWL4030 is not set ++# CONFIG_REGULATOR_WM831X is not set ++# CONFIG_REGULATOR_WM8350 is not set ++# CONFIG_REGULATOR_WM8400 is not set ++# CONFIG_REGULATOR_WM8994 is not set ++CONFIG_MEDIA_SUPPORT=m ++ ++# ++# Multimedia core support ++# ++CONFIG_MEDIA_CAMERA_SUPPORT=y ++CONFIG_MEDIA_ANALOG_TV_SUPPORT=y ++CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y ++CONFIG_MEDIA_RADIO_SUPPORT=y ++CONFIG_MEDIA_SDR_SUPPORT=y ++CONFIG_MEDIA_RC_SUPPORT=y ++CONFIG_MEDIA_CONTROLLER=y ++CONFIG_VIDEO_DEV=m ++CONFIG_VIDEO_V4L2_SUBDEV_API=y ++CONFIG_VIDEO_V4L2=m ++# CONFIG_VIDEO_ADV_DEBUG is not set ++# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set ++CONFIG_VIDEO_TUNER=m ++CONFIG_VIDEOBUF_GEN=m ++CONFIG_VIDEOBUF_DMA_SG=m ++CONFIG_VIDEOBUF_VMALLOC=m ++CONFIG_VIDEOBUF_DVB=m ++CONFIG_VIDEOBUF2_CORE=m ++CONFIG_VIDEOBUF2_MEMOPS=m ++CONFIG_VIDEOBUF2_DMA_CONTIG=m ++CONFIG_VIDEOBUF2_VMALLOC=m ++CONFIG_VIDEOBUF2_DMA_SG=m ++CONFIG_VIDEOBUF2_DVB=m ++CONFIG_DVB_CORE=m ++# CONFIG_DVB_NET is not set ++CONFIG_TTPCI_EEPROM=m ++CONFIG_DVB_MAX_ADAPTERS=8 ++# CONFIG_DVB_DYNAMIC_MINORS is not set ++ ++# ++# Media drivers ++# ++CONFIG_RC_CORE=m ++CONFIG_RC_MAP=m ++CONFIG_RC_DECODERS=y ++CONFIG_LIRC=m ++CONFIG_IR_LIRC_CODEC=m ++CONFIG_IR_NEC_DECODER=m ++CONFIG_IR_RC5_DECODER=m ++CONFIG_IR_RC6_DECODER=m ++CONFIG_IR_JVC_DECODER=m ++CONFIG_IR_SONY_DECODER=m ++CONFIG_IR_SANYO_DECODER=m ++CONFIG_IR_SHARP_DECODER=m ++CONFIG_IR_MCE_KBD_DECODER=m ++CONFIG_IR_XMP_DECODER=m ++CONFIG_RC_DEVICES=y ++CONFIG_RC_ATI_REMOTE=m ++CONFIG_IR_ENE=m ++CONFIG_IR_HIX5HD2=m ++CONFIG_IR_IMON=m ++CONFIG_IR_MCEUSB=m ++CONFIG_IR_ITE_CIR=m ++CONFIG_IR_FINTEK=m ++CONFIG_IR_NUVOTON=m ++CONFIG_IR_REDRAT3=m ++CONFIG_IR_STREAMZAP=m ++CONFIG_IR_WINBOND_CIR=m ++CONFIG_IR_IGUANA=m ++CONFIG_IR_TTUSBIR=m ++# CONFIG_IR_IMG is not set ++CONFIG_RC_LOOPBACK=m ++CONFIG_IR_GPIO_CIR=m ++CONFIG_MEDIA_USB_SUPPORT=y ++ ++# ++# Webcam devices ++# ++CONFIG_USB_VIDEO_CLASS=m ++CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y ++CONFIG_USB_GSPCA=m ++CONFIG_USB_M5602=m ++CONFIG_USB_STV06XX=m ++CONFIG_USB_GL860=m ++CONFIG_USB_GSPCA_BENQ=m ++CONFIG_USB_GSPCA_CONEX=m ++CONFIG_USB_GSPCA_CPIA1=m ++CONFIG_USB_GSPCA_DTCS033=m ++CONFIG_USB_GSPCA_ETOMS=m ++CONFIG_USB_GSPCA_FINEPIX=m ++CONFIG_USB_GSPCA_JEILINJ=m ++CONFIG_USB_GSPCA_JL2005BCD=m ++CONFIG_USB_GSPCA_KINECT=m ++CONFIG_USB_GSPCA_KONICA=m ++CONFIG_USB_GSPCA_MARS=m ++CONFIG_USB_GSPCA_MR97310A=m ++CONFIG_USB_GSPCA_NW80X=m ++CONFIG_USB_GSPCA_OV519=m ++CONFIG_USB_GSPCA_OV534=m ++CONFIG_USB_GSPCA_OV534_9=m ++CONFIG_USB_GSPCA_PAC207=m ++CONFIG_USB_GSPCA_PAC7302=m ++CONFIG_USB_GSPCA_PAC7311=m ++CONFIG_USB_GSPCA_SE401=m ++CONFIG_USB_GSPCA_SN9C2028=m ++CONFIG_USB_GSPCA_SN9C20X=m ++CONFIG_USB_GSPCA_SONIXB=m ++CONFIG_USB_GSPCA_SONIXJ=m ++CONFIG_USB_GSPCA_SPCA500=m ++CONFIG_USB_GSPCA_SPCA501=m ++CONFIG_USB_GSPCA_SPCA505=m ++CONFIG_USB_GSPCA_SPCA506=m ++CONFIG_USB_GSPCA_SPCA508=m ++CONFIG_USB_GSPCA_SPCA561=m ++CONFIG_USB_GSPCA_SPCA1528=m ++CONFIG_USB_GSPCA_SQ905=m ++CONFIG_USB_GSPCA_SQ905C=m ++CONFIG_USB_GSPCA_SQ930X=m ++CONFIG_USB_GSPCA_STK014=m ++CONFIG_USB_GSPCA_STK1135=m ++CONFIG_USB_GSPCA_STV0680=m ++CONFIG_USB_GSPCA_SUNPLUS=m ++CONFIG_USB_GSPCA_T613=m ++CONFIG_USB_GSPCA_TOPRO=m ++CONFIG_USB_GSPCA_TV8532=m ++CONFIG_USB_GSPCA_VC032X=m ++CONFIG_USB_GSPCA_VICAM=m ++CONFIG_USB_GSPCA_XIRLINK_CIT=m ++CONFIG_USB_GSPCA_ZC3XX=m ++CONFIG_USB_PWC=m ++# CONFIG_USB_PWC_DEBUG is not set ++CONFIG_USB_PWC_INPUT_EVDEV=y ++CONFIG_VIDEO_CPIA2=m ++CONFIG_USB_ZR364XX=m ++CONFIG_USB_STKWEBCAM=m ++CONFIG_USB_S2255=m ++CONFIG_VIDEO_USBTV=m ++ ++# ++# Analog TV USB devices ++# ++CONFIG_VIDEO_PVRUSB2=m ++CONFIG_VIDEO_PVRUSB2_SYSFS=y ++CONFIG_VIDEO_PVRUSB2_DVB=y ++# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set ++CONFIG_VIDEO_HDPVR=m ++CONFIG_VIDEO_TLG2300=m ++CONFIG_VIDEO_USBVISION=m ++CONFIG_VIDEO_STK1160_COMMON=m ++CONFIG_VIDEO_STK1160_AC97=y ++CONFIG_VIDEO_STK1160=m ++CONFIG_VIDEO_GO7007=m ++CONFIG_VIDEO_GO7007_USB=m ++CONFIG_VIDEO_GO7007_LOADER=m ++CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m ++ ++# ++# Analog/digital TV USB devices ++# ++CONFIG_VIDEO_AU0828=m ++CONFIG_VIDEO_AU0828_V4L2=y ++CONFIG_VIDEO_AU0828_RC=y ++CONFIG_VIDEO_CX231XX=m ++CONFIG_VIDEO_CX231XX_RC=y ++CONFIG_VIDEO_CX231XX_ALSA=m ++CONFIG_VIDEO_CX231XX_DVB=m ++CONFIG_VIDEO_TM6000=m ++CONFIG_VIDEO_TM6000_ALSA=m ++CONFIG_VIDEO_TM6000_DVB=m ++ ++# ++# Digital TV USB devices ++# ++CONFIG_DVB_USB=m ++# CONFIG_DVB_USB_DEBUG is not set ++CONFIG_DVB_USB_A800=m ++CONFIG_DVB_USB_DIBUSB_MB=m ++# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set ++CONFIG_DVB_USB_DIBUSB_MC=m ++CONFIG_DVB_USB_DIB0700=m ++CONFIG_DVB_USB_UMT_010=m ++CONFIG_DVB_USB_CXUSB=m ++CONFIG_DVB_USB_M920X=m ++CONFIG_DVB_USB_DIGITV=m ++CONFIG_DVB_USB_VP7045=m ++CONFIG_DVB_USB_VP702X=m ++CONFIG_DVB_USB_GP8PSK=m ++CONFIG_DVB_USB_NOVA_T_USB2=m ++CONFIG_DVB_USB_TTUSB2=m ++CONFIG_DVB_USB_DTT200U=m ++CONFIG_DVB_USB_OPERA1=m ++CONFIG_DVB_USB_AF9005=m ++CONFIG_DVB_USB_AF9005_REMOTE=m ++CONFIG_DVB_USB_PCTV452E=m ++CONFIG_DVB_USB_DW2102=m ++CONFIG_DVB_USB_CINERGY_T2=m ++CONFIG_DVB_USB_DTV5100=m ++CONFIG_DVB_USB_FRIIO=m ++CONFIG_DVB_USB_AZ6027=m ++CONFIG_DVB_USB_TECHNISAT_USB2=m ++CONFIG_DVB_USB_V2=m ++CONFIG_DVB_USB_AF9015=m ++CONFIG_DVB_USB_AF9035=m ++CONFIG_DVB_USB_ANYSEE=m ++CONFIG_DVB_USB_AU6610=m ++CONFIG_DVB_USB_AZ6007=m ++CONFIG_DVB_USB_CE6230=m ++CONFIG_DVB_USB_EC168=m ++CONFIG_DVB_USB_GL861=m ++CONFIG_DVB_USB_LME2510=m ++CONFIG_DVB_USB_MXL111SF=m ++CONFIG_DVB_USB_RTL28XXU=m ++CONFIG_DVB_USB_DVBSKY=m ++CONFIG_DVB_TTUSB_BUDGET=m ++CONFIG_DVB_TTUSB_DEC=m ++CONFIG_SMS_USB_DRV=m ++CONFIG_DVB_B2C2_FLEXCOP_USB=m ++# CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set ++CONFIG_DVB_AS102=m ++ ++# ++# Webcam, TV (analog/digital) USB devices ++# ++CONFIG_VIDEO_EM28XX=m ++CONFIG_VIDEO_EM28XX_V4L2=m ++CONFIG_VIDEO_EM28XX_ALSA=m ++CONFIG_VIDEO_EM28XX_DVB=m ++CONFIG_VIDEO_EM28XX_RC=m ++ ++# ++# Software defined radio USB devices ++# ++CONFIG_USB_AIRSPY=m ++CONFIG_USB_HACKRF=m ++CONFIG_MEDIA_PCI_SUPPORT=y ++ ++# ++# Media capture support ++# ++CONFIG_VIDEO_MEYE=m ++ ++# ++# Media capture/analog TV support ++# ++CONFIG_VIDEO_IVTV=m ++CONFIG_VIDEO_IVTV_ALSA=m ++CONFIG_VIDEO_FB_IVTV=m ++CONFIG_VIDEO_ZORAN=m ++CONFIG_VIDEO_ZORAN_DC30=m ++CONFIG_VIDEO_ZORAN_ZR36060=m ++CONFIG_VIDEO_ZORAN_BUZ=m ++CONFIG_VIDEO_ZORAN_DC10=m ++CONFIG_VIDEO_ZORAN_LML33=m ++CONFIG_VIDEO_ZORAN_LML33R10=m ++CONFIG_VIDEO_ZORAN_AVS6EYES=m ++CONFIG_VIDEO_HEXIUM_GEMINI=m ++CONFIG_VIDEO_HEXIUM_ORION=m ++CONFIG_VIDEO_MXB=m ++CONFIG_VIDEO_SOLO6X10=m ++CONFIG_VIDEO_TW68=m ++ ++# ++# Media capture/analog/hybrid TV support ++# ++CONFIG_VIDEO_CX18=m ++CONFIG_VIDEO_CX18_ALSA=m ++CONFIG_VIDEO_CX23885=m ++CONFIG_MEDIA_ALTERA_CI=m ++CONFIG_VIDEO_CX25821=m ++CONFIG_VIDEO_CX25821_ALSA=m ++CONFIG_VIDEO_CX88=m ++CONFIG_VIDEO_CX88_ALSA=m ++CONFIG_VIDEO_CX88_BLACKBIRD=m ++CONFIG_VIDEO_CX88_DVB=m ++CONFIG_VIDEO_CX88_ENABLE_VP3054=y ++CONFIG_VIDEO_CX88_VP3054=m ++CONFIG_VIDEO_CX88_MPEG=m ++CONFIG_VIDEO_BT848=m ++CONFIG_DVB_BT8XX=m ++CONFIG_VIDEO_SAA7134=m ++CONFIG_VIDEO_SAA7134_ALSA=m ++CONFIG_VIDEO_SAA7134_RC=y ++CONFIG_VIDEO_SAA7134_DVB=m ++CONFIG_VIDEO_SAA7134_GO7007=m ++CONFIG_VIDEO_SAA7164=m ++ ++# ++# Media digital TV PCI Adapters ++# ++CONFIG_DVB_AV7110_IR=y ++CONFIG_DVB_AV7110=m ++CONFIG_DVB_AV7110_OSD=y ++CONFIG_DVB_BUDGET_CORE=m ++CONFIG_DVB_BUDGET=m ++CONFIG_DVB_BUDGET_CI=m ++CONFIG_DVB_BUDGET_AV=m ++CONFIG_DVB_BUDGET_PATCH=m ++CONFIG_DVB_B2C2_FLEXCOP_PCI=m ++# CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set ++CONFIG_DVB_PLUTO2=m ++CONFIG_DVB_DM1105=m ++CONFIG_DVB_PT1=m ++CONFIG_DVB_PT3=m ++CONFIG_MANTIS_CORE=m ++CONFIG_DVB_MANTIS=m ++CONFIG_DVB_HOPPER=m ++CONFIG_DVB_NGENE=m ++CONFIG_DVB_DDBRIDGE=m ++CONFIG_V4L_PLATFORM_DRIVERS=y ++CONFIG_VIDEO_CAFE_CCIC=m ++CONFIG_VIDEO_VIA_CAMERA=m ++CONFIG_SOC_CAMERA=m ++CONFIG_SOC_CAMERA_PLATFORM=m ++# CONFIG_V4L_MEM2MEM_DRIVERS is not set ++# CONFIG_V4L_TEST_DRIVERS is not set ++ ++# ++# Supported MMC/SDIO adapters ++# ++CONFIG_SMS_SDIO_DRV=m ++# CONFIG_MEDIA_PARPORT_SUPPORT is not set ++CONFIG_RADIO_ADAPTERS=y ++CONFIG_RADIO_TEA575X=m ++# CONFIG_RADIO_SI470X is not set ++# CONFIG_RADIO_SI4713 is not set ++# CONFIG_USB_MR800 is not set ++# CONFIG_USB_DSBR is not set ++# CONFIG_RADIO_MAXIRADIO is not set ++# CONFIG_RADIO_SHARK is not set ++# CONFIG_RADIO_SHARK2 is not set ++# CONFIG_USB_KEENE is not set ++# CONFIG_USB_RAREMONO is not set ++# CONFIG_USB_MA901 is not set ++# CONFIG_RADIO_TEA5764 is not set ++# CONFIG_RADIO_SAA7706H is not set ++# CONFIG_RADIO_TEF6862 is not set ++# CONFIG_RADIO_WL1273 is not set ++ ++# ++# Texas Instruments WL128x FM driver (ST based) ++# ++# CONFIG_RADIO_WL128X is not set ++ ++# ++# Supported FireWire (IEEE 1394) Adapters ++# ++# CONFIG_DVB_FIREDTV is not set ++CONFIG_MEDIA_COMMON_OPTIONS=y ++ ++# ++# common driver options ++# ++CONFIG_VIDEO_CX2341X=m ++CONFIG_VIDEO_BTCX=m ++CONFIG_VIDEO_TVEEPROM=m ++CONFIG_CYPRESS_FIRMWARE=m ++CONFIG_DVB_B2C2_FLEXCOP=m ++CONFIG_VIDEO_SAA7146=m ++CONFIG_VIDEO_SAA7146_VV=m ++CONFIG_SMS_SIANO_MDTV=m ++# CONFIG_SMS_SIANO_RC is not set ++# CONFIG_SMS_SIANO_DEBUGFS is not set ++ ++# ++# Media ancillary drivers (tuners, sensors, i2c, frontends) ++# ++CONFIG_MEDIA_SUBDRV_AUTOSELECT=y ++CONFIG_MEDIA_ATTACH=y ++CONFIG_VIDEO_IR_I2C=m ++ ++# ++# Audio decoders, processors and mixers ++# ++CONFIG_VIDEO_TVAUDIO=m ++CONFIG_VIDEO_TDA7432=m ++CONFIG_VIDEO_TDA9840=m ++CONFIG_VIDEO_TEA6415C=m ++CONFIG_VIDEO_TEA6420=m ++CONFIG_VIDEO_MSP3400=m ++CONFIG_VIDEO_CS5345=m ++CONFIG_VIDEO_CS53L32A=m ++CONFIG_VIDEO_UDA1342=m ++CONFIG_VIDEO_WM8775=m ++CONFIG_VIDEO_WM8739=m ++CONFIG_VIDEO_VP27SMPX=m ++CONFIG_VIDEO_SONY_BTF_MPX=m ++ ++# ++# RDS decoders ++# ++CONFIG_VIDEO_SAA6588=m ++ ++# ++# Video decoders ++# ++CONFIG_VIDEO_BT819=m ++CONFIG_VIDEO_BT856=m ++CONFIG_VIDEO_BT866=m ++CONFIG_VIDEO_KS0127=m ++CONFIG_VIDEO_SAA7110=m ++CONFIG_VIDEO_SAA711X=m ++CONFIG_VIDEO_TVP5150=m ++CONFIG_VIDEO_TW2804=m ++CONFIG_VIDEO_TW9903=m ++CONFIG_VIDEO_TW9906=m ++CONFIG_VIDEO_VPX3220=m ++ ++# ++# Video and audio decoders ++# ++CONFIG_VIDEO_SAA717X=m ++CONFIG_VIDEO_CX25840=m ++ ++# ++# Video encoders ++# ++CONFIG_VIDEO_SAA7127=m ++CONFIG_VIDEO_SAA7185=m ++CONFIG_VIDEO_ADV7170=m ++CONFIG_VIDEO_ADV7175=m ++ ++# ++# Camera sensor devices ++# ++CONFIG_VIDEO_OV7640=m ++CONFIG_VIDEO_OV7670=m ++CONFIG_VIDEO_MT9V011=m ++ ++# ++# Flash devices ++# ++ ++# ++# Video improvement chips ++# ++CONFIG_VIDEO_UPD64031A=m ++CONFIG_VIDEO_UPD64083=m ++ ++# ++# Audio/Video compression chips ++# ++CONFIG_VIDEO_SAA6752HS=m ++ ++# ++# Miscellaneous helper chips ++# ++CONFIG_VIDEO_M52790=m ++ ++# ++# Sensors used on soc_camera driver ++# ++ ++# ++# soc_camera sensor drivers ++# ++# CONFIG_SOC_CAMERA_IMX074 is not set ++# CONFIG_SOC_CAMERA_MT9M001 is not set ++# CONFIG_SOC_CAMERA_MT9M111 is not set ++# CONFIG_SOC_CAMERA_MT9T031 is not set ++# CONFIG_SOC_CAMERA_MT9T112 is not set ++# CONFIG_SOC_CAMERA_MT9V022 is not set ++# CONFIG_SOC_CAMERA_OV2640 is not set ++# CONFIG_SOC_CAMERA_OV5642 is not set ++# CONFIG_SOC_CAMERA_OV6650 is not set ++# CONFIG_SOC_CAMERA_OV772X is not set ++# CONFIG_SOC_CAMERA_OV9640 is not set ++# CONFIG_SOC_CAMERA_OV9740 is not set ++# CONFIG_SOC_CAMERA_RJ54N1 is not set ++# CONFIG_SOC_CAMERA_TW9910 is not set ++CONFIG_MEDIA_TUNER=m ++CONFIG_MEDIA_TUNER_SIMPLE=m ++CONFIG_MEDIA_TUNER_TDA8290=m ++CONFIG_MEDIA_TUNER_TDA827X=m ++CONFIG_MEDIA_TUNER_TDA18271=m ++CONFIG_MEDIA_TUNER_TDA9887=m ++CONFIG_MEDIA_TUNER_TEA5761=m ++CONFIG_MEDIA_TUNER_TEA5767=m ++CONFIG_MEDIA_TUNER_MT20XX=m ++CONFIG_MEDIA_TUNER_MT2060=m ++CONFIG_MEDIA_TUNER_MT2063=m ++CONFIG_MEDIA_TUNER_MT2266=m ++CONFIG_MEDIA_TUNER_MT2131=m ++CONFIG_MEDIA_TUNER_QT1010=m ++CONFIG_MEDIA_TUNER_XC2028=m ++CONFIG_MEDIA_TUNER_XC5000=m ++CONFIG_MEDIA_TUNER_XC4000=m ++CONFIG_MEDIA_TUNER_MXL5005S=m ++CONFIG_MEDIA_TUNER_MXL5007T=m ++CONFIG_MEDIA_TUNER_MC44S803=m ++CONFIG_MEDIA_TUNER_MAX2165=m ++CONFIG_MEDIA_TUNER_TDA18218=m ++CONFIG_MEDIA_TUNER_FC0011=m ++CONFIG_MEDIA_TUNER_FC0012=m ++CONFIG_MEDIA_TUNER_FC0013=m ++CONFIG_MEDIA_TUNER_TDA18212=m ++CONFIG_MEDIA_TUNER_E4000=m ++CONFIG_MEDIA_TUNER_FC2580=m ++CONFIG_MEDIA_TUNER_M88TS2022=m ++CONFIG_MEDIA_TUNER_TUA9001=m ++CONFIG_MEDIA_TUNER_SI2157=m ++CONFIG_MEDIA_TUNER_IT913X=m ++CONFIG_MEDIA_TUNER_R820T=m ++CONFIG_MEDIA_TUNER_MXL301RF=m ++CONFIG_MEDIA_TUNER_QM1D1C0042=m ++ ++# ++# Multistandard (satellite) frontends ++# ++CONFIG_DVB_STB0899=m ++CONFIG_DVB_STB6100=m ++CONFIG_DVB_STV090x=m ++CONFIG_DVB_STV6110x=m ++CONFIG_DVB_M88DS3103=m ++ ++# ++# Multistandard (cable + terrestrial) frontends ++# ++CONFIG_DVB_DRXK=m ++CONFIG_DVB_TDA18271C2DD=m ++CONFIG_DVB_SI2165=m ++ ++# ++# DVB-S (satellite) frontends ++# ++CONFIG_DVB_CX24110=m ++CONFIG_DVB_CX24123=m ++CONFIG_DVB_MT312=m ++CONFIG_DVB_ZL10036=m ++CONFIG_DVB_ZL10039=m ++CONFIG_DVB_S5H1420=m ++CONFIG_DVB_STV0288=m ++CONFIG_DVB_STB6000=m ++CONFIG_DVB_STV0299=m ++CONFIG_DVB_STV6110=m ++CONFIG_DVB_STV0900=m ++CONFIG_DVB_TDA8083=m ++CONFIG_DVB_TDA10086=m ++CONFIG_DVB_TDA8261=m ++CONFIG_DVB_VES1X93=m ++CONFIG_DVB_TUNER_ITD1000=m ++CONFIG_DVB_TUNER_CX24113=m ++CONFIG_DVB_TDA826X=m ++CONFIG_DVB_TUA6100=m ++CONFIG_DVB_CX24116=m ++CONFIG_DVB_CX24117=m ++CONFIG_DVB_SI21XX=m ++CONFIG_DVB_TS2020=m ++CONFIG_DVB_DS3000=m ++CONFIG_DVB_MB86A16=m ++CONFIG_DVB_TDA10071=m ++ ++# ++# DVB-T (terrestrial) frontends ++# ++CONFIG_DVB_SP8870=m ++CONFIG_DVB_SP887X=m ++CONFIG_DVB_CX22700=m ++CONFIG_DVB_CX22702=m ++CONFIG_DVB_DRXD=m ++CONFIG_DVB_L64781=m ++CONFIG_DVB_TDA1004X=m ++CONFIG_DVB_NXT6000=m ++CONFIG_DVB_MT352=m ++CONFIG_DVB_ZL10353=m ++CONFIG_DVB_DIB3000MB=m ++CONFIG_DVB_DIB3000MC=m ++CONFIG_DVB_DIB7000M=m ++CONFIG_DVB_DIB7000P=m ++CONFIG_DVB_TDA10048=m ++CONFIG_DVB_AF9013=m ++CONFIG_DVB_EC100=m ++CONFIG_DVB_STV0367=m ++CONFIG_DVB_CXD2820R=m ++CONFIG_DVB_RTL2830=m ++CONFIG_DVB_RTL2832=m ++CONFIG_DVB_RTL2832_SDR=m ++CONFIG_DVB_SI2168=m ++CONFIG_DVB_AS102_FE=m ++ ++# ++# DVB-C (cable) frontends ++# ++CONFIG_DVB_VES1820=m ++CONFIG_DVB_TDA10021=m ++CONFIG_DVB_TDA10023=m ++CONFIG_DVB_STV0297=m ++ ++# ++# ATSC (North American/Korean Terrestrial/Cable DTV) frontends ++# ++CONFIG_DVB_NXT200X=m ++CONFIG_DVB_OR51211=m ++CONFIG_DVB_OR51132=m ++CONFIG_DVB_BCM3510=m ++CONFIG_DVB_LGDT330X=m ++CONFIG_DVB_LGDT3305=m ++CONFIG_DVB_LG2160=m ++CONFIG_DVB_S5H1409=m ++CONFIG_DVB_AU8522=m ++CONFIG_DVB_AU8522_DTV=m ++CONFIG_DVB_AU8522_V4L=m ++CONFIG_DVB_S5H1411=m ++ ++# ++# ISDB-T (terrestrial) frontends ++# ++CONFIG_DVB_S921=m ++CONFIG_DVB_DIB8000=m ++CONFIG_DVB_MB86A20S=m ++CONFIG_DVB_TC90522=m ++ ++# ++# Digital terrestrial only tuners/PLL ++# ++CONFIG_DVB_PLL=m ++CONFIG_DVB_TUNER_DIB0070=m ++CONFIG_DVB_TUNER_DIB0090=m ++ ++# ++# SEC control devices for DVB-S ++# ++CONFIG_DVB_DRX39XYJ=m ++CONFIG_DVB_LNBP21=m ++CONFIG_DVB_LNBP22=m ++CONFIG_DVB_ISL6405=m ++CONFIG_DVB_ISL6421=m ++CONFIG_DVB_ISL6423=m ++CONFIG_DVB_A8293=m ++CONFIG_DVB_LGS8GXX=m ++CONFIG_DVB_ATBM8830=m ++CONFIG_DVB_TDA665x=m ++CONFIG_DVB_IX2505V=m ++CONFIG_DVB_M88RS2000=m ++CONFIG_DVB_AF9033=m ++ ++# ++# Tools to develop new frontends ++# ++# CONFIG_DVB_DUMMY_FE is not set ++ ++# ++# Graphics support ++# ++CONFIG_AGP=y ++CONFIG_AGP_AMD64=y ++CONFIG_AGP_INTEL=y ++CONFIG_AGP_SIS=m ++CONFIG_AGP_VIA=y ++CONFIG_INTEL_GTT=y ++CONFIG_VGA_ARB=y ++CONFIG_VGA_ARB_MAX_GPUS=16 ++CONFIG_VGA_SWITCHEROO=y ++ ++# ++# Direct Rendering Manager ++# ++CONFIG_DRM=m ++CONFIG_DRM_KMS_HELPER=m ++CONFIG_DRM_KMS_FB_HELPER=y ++CONFIG_DRM_LOAD_EDID_FIRMWARE=y ++CONFIG_DRM_TTM=m ++ ++# ++# I2C encoder or helper chips ++# ++# CONFIG_DRM_I2C_CH7006 is not set ++CONFIG_DRM_I2C_SIL164=m ++CONFIG_DRM_I2C_NXP_TDA998X=m ++CONFIG_DRM_PTN3460=m ++# CONFIG_DRM_TDFX is not set ++CONFIG_DRM_R128=m ++CONFIG_DRM_RADEON=m ++# CONFIG_DRM_RADEON_UMS is not set ++CONFIG_DRM_NOUVEAU=m ++CONFIG_NOUVEAU_DEBUG=5 ++CONFIG_NOUVEAU_DEBUG_DEFAULT=3 ++CONFIG_DRM_NOUVEAU_BACKLIGHT=y ++CONFIG_DRM_I810=m ++CONFIG_DRM_I915=m ++CONFIG_DRM_I915_KMS=y ++CONFIG_DRM_I915_FBDEV=y ++CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT=y ++CONFIG_DRM_MGA=m ++CONFIG_DRM_SIS=m ++CONFIG_DRM_VIA=m ++# CONFIG_DRM_SAVAGE is not set ++CONFIG_DRM_VMWGFX=m ++CONFIG_DRM_VMWGFX_FBCON=y ++CONFIG_DRM_GMA500=m ++CONFIG_DRM_GMA600=y ++CONFIG_DRM_GMA3600=y ++# CONFIG_DRM_UDL is not set ++CONFIG_DRM_AST=m ++# CONFIG_DRM_MGAG200 is not set ++CONFIG_DRM_CIRRUS_QEMU=m ++CONFIG_DRM_QXL=m ++# CONFIG_DRM_BOCHS is not set ++ ++# ++# Frame buffer Devices ++# ++CONFIG_FB=y ++CONFIG_FIRMWARE_EDID=y ++CONFIG_FB_CMDLINE=y ++CONFIG_FB_DDC=m ++CONFIG_FB_BOOT_VESA_SUPPORT=y ++CONFIG_FB_CFB_FILLRECT=y ++CONFIG_FB_CFB_COPYAREA=y ++CONFIG_FB_CFB_IMAGEBLIT=y ++# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set ++CONFIG_FB_SYS_FILLRECT=m ++CONFIG_FB_SYS_COPYAREA=m ++CONFIG_FB_SYS_IMAGEBLIT=m ++# CONFIG_FB_FOREIGN_ENDIAN is not set ++CONFIG_FB_SYS_FOPS=m ++CONFIG_FB_DEFERRED_IO=y ++# CONFIG_FB_SVGALIB is not set ++# CONFIG_FB_MACMODES is not set ++CONFIG_FB_BACKLIGHT=y ++CONFIG_FB_MODE_HELPERS=y ++CONFIG_FB_TILEBLITTING=y ++ ++# ++# Frame buffer hardware drivers ++# ++CONFIG_FB_CIRRUS=m ++CONFIG_FB_PM2=m ++CONFIG_FB_PM2_FIFO_DISCONNECT=y ++# CONFIG_FB_CYBER2000 is not set ++# CONFIG_FB_ARC is not set ++# CONFIG_FB_ASILIANT is not set ++# CONFIG_FB_IMSTT is not set ++CONFIG_FB_VGA16=m ++CONFIG_FB_UVESA=m ++CONFIG_FB_VESA=y ++CONFIG_FB_EFI=y ++# CONFIG_FB_N411 is not set ++# CONFIG_FB_HGA is not set ++# CONFIG_FB_OPENCORES is not set ++# CONFIG_FB_S1D13XXX is not set ++CONFIG_FB_NVIDIA=m ++CONFIG_FB_NVIDIA_I2C=y ++# CONFIG_FB_NVIDIA_DEBUG is not set ++CONFIG_FB_NVIDIA_BACKLIGHT=y ++CONFIG_FB_RIVA=m ++CONFIG_FB_RIVA_I2C=y ++# CONFIG_FB_RIVA_DEBUG is not set ++CONFIG_FB_RIVA_BACKLIGHT=y ++CONFIG_FB_I740=m ++CONFIG_FB_LE80578=m ++CONFIG_FB_CARILLO_RANCH=m ++CONFIG_FB_INTEL=m ++# CONFIG_FB_INTEL_DEBUG is not set ++CONFIG_FB_INTEL_I2C=y ++CONFIG_FB_MATROX=m ++CONFIG_FB_MATROX_MILLENIUM=y ++CONFIG_FB_MATROX_MYSTIQUE=y ++CONFIG_FB_MATROX_G=y ++CONFIG_FB_MATROX_I2C=m ++CONFIG_FB_MATROX_MAVEN=m ++CONFIG_FB_RADEON=m ++CONFIG_FB_RADEON_I2C=y ++CONFIG_FB_RADEON_BACKLIGHT=y ++# CONFIG_FB_RADEON_DEBUG is not set ++CONFIG_FB_ATY128=m ++CONFIG_FB_ATY128_BACKLIGHT=y ++CONFIG_FB_ATY=m ++CONFIG_FB_ATY_CT=y ++# CONFIG_FB_ATY_GENERIC_LCD is not set ++CONFIG_FB_ATY_GX=y ++CONFIG_FB_ATY_BACKLIGHT=y ++# CONFIG_FB_S3 is not set ++# CONFIG_FB_SAVAGE is not set ++CONFIG_FB_SIS=m ++CONFIG_FB_SIS_300=y ++CONFIG_FB_SIS_315=y ++CONFIG_FB_VIA=m ++# CONFIG_FB_VIA_DIRECT_PROCFS is not set ++CONFIG_FB_VIA_X_COMPATIBILITY=y ++CONFIG_FB_NEOMAGIC=m ++# CONFIG_FB_KYRO is not set ++# CONFIG_FB_3DFX is not set ++# CONFIG_FB_VOODOO1 is not set ++# CONFIG_FB_VT8623 is not set ++# CONFIG_FB_TRIDENT is not set ++# CONFIG_FB_ARK is not set ++# CONFIG_FB_PM3 is not set ++# CONFIG_FB_CARMINE is not set ++# CONFIG_FB_SM501 is not set ++# CONFIG_FB_SMSCUFX is not set ++# CONFIG_FB_UDL is not set ++# CONFIG_FB_VIRTUAL is not set ++CONFIG_XEN_FBDEV_FRONTEND=m ++# CONFIG_FB_METRONOME is not set ++# CONFIG_FB_MB862XX is not set ++# CONFIG_FB_BROADSHEET is not set ++# CONFIG_FB_AUO_K190X is not set ++CONFIG_FB_HYPERV=m ++CONFIG_FB_SIMPLE=y ++CONFIG_BACKLIGHT_LCD_SUPPORT=y ++CONFIG_LCD_CLASS_DEVICE=m ++CONFIG_LCD_PLATFORM=m ++CONFIG_BACKLIGHT_CLASS_DEVICE=y ++# CONFIG_BACKLIGHT_GENERIC is not set ++# CONFIG_BACKLIGHT_LM3533 is not set ++# CONFIG_BACKLIGHT_CARILLO_RANCH is not set ++# CONFIG_BACKLIGHT_DA903X is not set ++# CONFIG_BACKLIGHT_DA9052 is not set ++# CONFIG_BACKLIGHT_MAX8925 is not set ++# CONFIG_BACKLIGHT_APPLE is not set ++# CONFIG_BACKLIGHT_SAHARA is not set ++# CONFIG_BACKLIGHT_WM831X is not set ++# CONFIG_BACKLIGHT_ADP5520 is not set ++# CONFIG_BACKLIGHT_ADP8860 is not set ++# CONFIG_BACKLIGHT_ADP8870 is not set ++# CONFIG_BACKLIGHT_88PM860X is not set ++# CONFIG_BACKLIGHT_PCF50633 is not set ++# CONFIG_BACKLIGHT_AAT2870 is not set ++# CONFIG_BACKLIGHT_LM3639 is not set ++# CONFIG_BACKLIGHT_PANDORA is not set ++# CONFIG_BACKLIGHT_TPS65217 is not set ++# CONFIG_BACKLIGHT_AS3711 is not set ++CONFIG_BACKLIGHT_GPIO=m ++# CONFIG_BACKLIGHT_LV5207LP is not set ++# CONFIG_BACKLIGHT_BD6107 is not set ++CONFIG_VGASTATE=m ++CONFIG_HDMI=y ++ ++# ++# Console display driver support ++# ++CONFIG_VGA_CONSOLE=y ++# CONFIG_VGACON_SOFT_SCROLLBACK is not set ++CONFIG_DUMMY_CONSOLE=y ++CONFIG_FRAMEBUFFER_CONSOLE=y ++CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y ++CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y ++# CONFIG_LOGO is not set ++CONFIG_SOUND=m ++CONFIG_SOUND_OSS_CORE=y ++# CONFIG_SOUND_OSS_CORE_PRECLAIM is not set ++CONFIG_SND=m ++CONFIG_SND_TIMER=m ++CONFIG_SND_PCM=m ++CONFIG_SND_HWDEP=m ++CONFIG_SND_RAWMIDI=m ++CONFIG_SND_JACK=y ++CONFIG_SND_SEQUENCER=m ++CONFIG_SND_SEQ_DUMMY=m ++CONFIG_SND_OSSEMUL=y ++CONFIG_SND_MIXER_OSS=m ++CONFIG_SND_PCM_OSS=m ++CONFIG_SND_PCM_OSS_PLUGINS=y ++# CONFIG_SND_SEQUENCER_OSS is not set ++CONFIG_SND_HRTIMER=m ++CONFIG_SND_SEQ_HRTIMER_DEFAULT=y ++CONFIG_SND_DYNAMIC_MINORS=y ++CONFIG_SND_MAX_CARDS=32 ++CONFIG_SND_SUPPORT_OLD_API=y ++CONFIG_SND_VERBOSE_PROCFS=y ++# CONFIG_SND_VERBOSE_PRINTK is not set ++# CONFIG_SND_DEBUG is not set ++CONFIG_SND_VMASTER=y ++CONFIG_SND_KCTL_JACK=y ++CONFIG_SND_DMA_SGBUF=y ++CONFIG_SND_RAWMIDI_SEQ=m ++CONFIG_SND_OPL3_LIB_SEQ=m ++# CONFIG_SND_OPL4_LIB_SEQ is not set ++# CONFIG_SND_SBAWE_SEQ is not set ++CONFIG_SND_EMU10K1_SEQ=m ++CONFIG_SND_MPU401_UART=m ++CONFIG_SND_OPL3_LIB=m ++CONFIG_SND_VX_LIB=m ++CONFIG_SND_AC97_CODEC=m ++CONFIG_SND_DRIVERS=y ++# CONFIG_SND_PCSP is not set ++CONFIG_SND_DUMMY=m ++CONFIG_SND_ALOOP=m ++CONFIG_SND_VIRMIDI=m ++CONFIG_SND_MTPAV=m ++CONFIG_SND_MTS64=m ++CONFIG_SND_SERIAL_U16550=m ++CONFIG_SND_MPU401=m ++# CONFIG_SND_PORTMAN2X4 is not set ++CONFIG_SND_AC97_POWER_SAVE=y ++CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0 ++CONFIG_SND_SB_COMMON=m ++CONFIG_SND_PCI=y ++CONFIG_SND_AD1889=m ++CONFIG_SND_ALS300=m ++CONFIG_SND_ALS4000=m ++CONFIG_SND_ALI5451=m ++CONFIG_SND_ASIHPI=m ++CONFIG_SND_ATIIXP=m ++CONFIG_SND_ATIIXP_MODEM=m ++CONFIG_SND_AU8810=m ++CONFIG_SND_AU8820=m ++CONFIG_SND_AU8830=m ++CONFIG_SND_AW2=m ++CONFIG_SND_AZT3328=m ++CONFIG_SND_BT87X=m ++# CONFIG_SND_BT87X_OVERCLOCK is not set ++CONFIG_SND_CA0106=m ++CONFIG_SND_CMIPCI=m ++CONFIG_SND_OXYGEN_LIB=m ++CONFIG_SND_OXYGEN=m ++CONFIG_SND_CS4281=m ++CONFIG_SND_CS46XX=m ++CONFIG_SND_CS46XX_NEW_DSP=y ++CONFIG_SND_CTXFI=m ++CONFIG_SND_DARLA20=m ++CONFIG_SND_GINA20=m ++CONFIG_SND_LAYLA20=m ++CONFIG_SND_DARLA24=m ++CONFIG_SND_GINA24=m ++CONFIG_SND_LAYLA24=m ++CONFIG_SND_MONA=m ++CONFIG_SND_MIA=m ++CONFIG_SND_ECHO3G=m ++CONFIG_SND_INDIGO=m ++CONFIG_SND_INDIGOIO=m ++CONFIG_SND_INDIGODJ=m ++CONFIG_SND_INDIGOIOX=m ++CONFIG_SND_INDIGODJX=m ++CONFIG_SND_EMU10K1=m ++CONFIG_SND_EMU10K1X=m ++CONFIG_SND_ENS1370=m ++CONFIG_SND_ENS1371=m ++CONFIG_SND_ES1938=m ++CONFIG_SND_ES1968=m ++CONFIG_SND_ES1968_INPUT=y ++CONFIG_SND_ES1968_RADIO=y ++CONFIG_SND_FM801=m ++CONFIG_SND_FM801_TEA575X_BOOL=y ++CONFIG_SND_HDSP=m ++CONFIG_SND_HDSPM=m ++CONFIG_SND_ICE1712=m ++CONFIG_SND_ICE1724=m ++CONFIG_SND_INTEL8X0=m ++CONFIG_SND_INTEL8X0M=m ++CONFIG_SND_KORG1212=m ++CONFIG_SND_LOLA=m ++CONFIG_SND_LX6464ES=m ++CONFIG_SND_MAESTRO3=m ++CONFIG_SND_MAESTRO3_INPUT=y ++CONFIG_SND_MIXART=m ++CONFIG_SND_NM256=m ++CONFIG_SND_PCXHR=m ++CONFIG_SND_RIPTIDE=m ++CONFIG_SND_RME32=m ++CONFIG_SND_RME96=m ++CONFIG_SND_RME9652=m ++CONFIG_SND_SONICVIBES=m ++CONFIG_SND_TRIDENT=m ++CONFIG_SND_VIA82XX=m ++CONFIG_SND_VIA82XX_MODEM=m ++CONFIG_SND_VIRTUOSO=m ++CONFIG_SND_VX222=m ++CONFIG_SND_YMFPCI=m ++ ++# ++# HD-Audio ++# ++CONFIG_SND_HDA=m ++CONFIG_SND_HDA_INTEL=m ++CONFIG_SND_HDA_DSP_LOADER=y ++CONFIG_SND_HDA_PREALLOC_SIZE=64 ++CONFIG_SND_HDA_HWDEP=y ++CONFIG_SND_HDA_RECONFIG=y ++CONFIG_SND_HDA_INPUT_BEEP=y ++CONFIG_SND_HDA_INPUT_BEEP_MODE=0 ++CONFIG_SND_HDA_INPUT_JACK=y ++CONFIG_SND_HDA_PATCH_LOADER=y ++CONFIG_SND_HDA_CODEC_REALTEK=m ++CONFIG_SND_HDA_CODEC_ANALOG=m ++CONFIG_SND_HDA_CODEC_SIGMATEL=m ++CONFIG_SND_HDA_CODEC_VIA=m ++CONFIG_SND_HDA_CODEC_HDMI=m ++CONFIG_SND_HDA_I915=y ++CONFIG_SND_HDA_CODEC_CIRRUS=m ++CONFIG_SND_HDA_CODEC_CONEXANT=m ++CONFIG_SND_HDA_CODEC_CA0110=m ++CONFIG_SND_HDA_CODEC_CA0132=m ++CONFIG_SND_HDA_CODEC_CA0132_DSP=y ++CONFIG_SND_HDA_CODEC_CMEDIA=m ++CONFIG_SND_HDA_CODEC_SI3054=m ++CONFIG_SND_HDA_GENERIC=m ++CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0 ++CONFIG_SND_USB=y ++CONFIG_SND_USB_AUDIO=m ++CONFIG_SND_USB_UA101=m ++CONFIG_SND_USB_USX2Y=m ++CONFIG_SND_USB_CAIAQ=m ++CONFIG_SND_USB_CAIAQ_INPUT=y ++CONFIG_SND_USB_US122L=m ++CONFIG_SND_USB_6FIRE=m ++CONFIG_SND_USB_HIFACE=m ++CONFIG_SND_BCD2000=m ++# CONFIG_SND_FIREWIRE is not set ++# CONFIG_SND_PCMCIA is not set ++# CONFIG_SND_SOC is not set ++# CONFIG_SOUND_PRIME is not set ++CONFIG_AC97_BUS=m ++ ++# ++# HID support ++# ++CONFIG_HID=m ++CONFIG_HIDRAW=y ++CONFIG_UHID=m ++CONFIG_HID_GENERIC=m ++ ++# ++# Special HID drivers ++# ++CONFIG_HID_A4TECH=m ++CONFIG_HID_ACRUX=m ++CONFIG_HID_ACRUX_FF=y ++CONFIG_HID_APPLE=m ++CONFIG_HID_APPLEIR=m ++CONFIG_HID_AUREAL=m ++CONFIG_HID_BELKIN=m ++CONFIG_HID_CHERRY=m ++CONFIG_HID_CHICONY=m ++CONFIG_HID_PRODIKEYS=m ++CONFIG_HID_CP2112=m ++CONFIG_HID_CYPRESS=m ++CONFIG_HID_DRAGONRISE=m ++CONFIG_DRAGONRISE_FF=y ++CONFIG_HID_EMS_FF=m ++CONFIG_HID_ELECOM=m ++CONFIG_HID_ELO=m ++CONFIG_HID_EZKEY=m ++CONFIG_HID_HOLTEK=m ++CONFIG_HOLTEK_FF=y ++CONFIG_HID_GT683R=m ++CONFIG_HID_HUION=m ++CONFIG_HID_KEYTOUCH=m ++CONFIG_HID_KYE=m ++CONFIG_HID_UCLOGIC=m ++CONFIG_HID_WALTOP=m ++CONFIG_HID_GYRATION=m ++CONFIG_HID_ICADE=m ++CONFIG_HID_TWINHAN=m ++CONFIG_HID_KENSINGTON=m ++CONFIG_HID_LCPOWER=m ++CONFIG_HID_LENOVO=m ++CONFIG_HID_LOGITECH=m ++CONFIG_HID_LOGITECH_DJ=m ++CONFIG_HID_LOGITECH_HIDPP=m ++CONFIG_LOGITECH_FF=y ++CONFIG_LOGIRUMBLEPAD2_FF=y ++CONFIG_LOGIG940_FF=y ++CONFIG_LOGIWHEELS_FF=y ++CONFIG_HID_MAGICMOUSE=m ++CONFIG_HID_MICROSOFT=m ++CONFIG_HID_MONTEREY=m ++CONFIG_HID_MULTITOUCH=m ++CONFIG_HID_NTRIG=m ++CONFIG_HID_ORTEK=m ++CONFIG_HID_PANTHERLORD=m ++CONFIG_PANTHERLORD_FF=y ++CONFIG_HID_PENMOUNT=m ++CONFIG_HID_PETALYNX=m ++CONFIG_HID_PICOLCD=m ++CONFIG_HID_PICOLCD_FB=y ++CONFIG_HID_PICOLCD_BACKLIGHT=y ++CONFIG_HID_PICOLCD_LCD=y ++CONFIG_HID_PICOLCD_LEDS=y ++CONFIG_HID_PICOLCD_CIR=y ++CONFIG_HID_PRIMAX=m ++CONFIG_HID_ROCCAT=m ++CONFIG_HID_SAITEK=m ++CONFIG_HID_SAMSUNG=m ++CONFIG_HID_SONY=m ++CONFIG_SONY_FF=y ++CONFIG_HID_SPEEDLINK=m ++CONFIG_HID_STEELSERIES=m ++CONFIG_HID_SUNPLUS=m ++CONFIG_HID_RMI=m ++CONFIG_HID_GREENASIA=m ++CONFIG_GREENASIA_FF=y ++CONFIG_HID_HYPERV_MOUSE=m ++CONFIG_HID_SMARTJOYPLUS=m ++CONFIG_SMARTJOYPLUS_FF=y ++CONFIG_HID_TIVO=m ++CONFIG_HID_TOPSEED=m ++CONFIG_HID_THINGM=m ++CONFIG_HID_THRUSTMASTER=m ++CONFIG_THRUSTMASTER_FF=y ++CONFIG_HID_WACOM=m ++CONFIG_HID_WIIMOTE=m ++CONFIG_HID_XINMO=m ++CONFIG_HID_ZEROPLUS=m ++CONFIG_ZEROPLUS_FF=y ++CONFIG_HID_ZYDACRON=m ++CONFIG_HID_SENSOR_HUB=m ++ ++# ++# USB HID support ++# ++CONFIG_USB_HID=m ++CONFIG_HID_PID=y ++CONFIG_USB_HIDDEV=y ++ ++# ++# USB HID Boot Protocol drivers ++# ++CONFIG_USB_KBD=m ++CONFIG_USB_MOUSE=m ++ ++# ++# I2C HID support ++# ++CONFIG_I2C_HID=m ++CONFIG_USB_OHCI_LITTLE_ENDIAN=y ++CONFIG_USB_SUPPORT=y ++CONFIG_USB_COMMON=y ++CONFIG_USB_ARCH_HAS_HCD=y ++CONFIG_USB=y ++CONFIG_USB_ANNOUNCE_NEW_DEVICES=y ++ ++# ++# Miscellaneous USB options ++# ++CONFIG_USB_DEFAULT_PERSIST=y ++CONFIG_USB_DYNAMIC_MINORS=y ++# CONFIG_USB_OTG_WHITELIST is not set ++# CONFIG_USB_OTG_BLACKLIST_HUB is not set ++# CONFIG_USB_OTG_FSM is not set ++CONFIG_USB_MON=m ++CONFIG_USB_WUSB_CBAF=m ++# CONFIG_USB_WUSB_CBAF_DEBUG is not set ++ ++# ++# USB Host Controller Drivers ++# ++CONFIG_USB_C67X00_HCD=m ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_PCI=y ++CONFIG_USB_XHCI_PLATFORM=m ++CONFIG_USB_EHCI_HCD=y ++CONFIG_USB_EHCI_ROOT_HUB_TT=y ++CONFIG_USB_EHCI_TT_NEWSCHED=y ++CONFIG_USB_EHCI_PCI=y ++CONFIG_USB_EHCI_HCD_PLATFORM=y ++CONFIG_USB_OXU210HP_HCD=m ++CONFIG_USB_ISP116X_HCD=m ++CONFIG_USB_ISP1760_HCD=m ++CONFIG_USB_ISP1362_HCD=m ++CONFIG_USB_FUSBH200_HCD=m ++CONFIG_USB_FOTG210_HCD=m ++CONFIG_USB_OHCI_HCD=y ++CONFIG_USB_OHCI_HCD_PCI=y ++CONFIG_USB_OHCI_HCD_PLATFORM=y ++CONFIG_USB_UHCI_HCD=y ++CONFIG_USB_SL811_HCD=m ++CONFIG_USB_SL811_HCD_ISO=y ++CONFIG_USB_SL811_CS=m ++CONFIG_USB_R8A66597_HCD=m ++CONFIG_USB_HCD_BCMA=m ++CONFIG_USB_HCD_SSB=m ++# CONFIG_USB_HCD_TEST_MODE is not set ++ ++# ++# USB Device Class drivers ++# ++CONFIG_USB_ACM=m ++CONFIG_USB_PRINTER=m ++CONFIG_USB_WDM=m ++CONFIG_USB_TMC=m ++ ++# ++# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may ++# ++ ++# ++# also be needed; see USB_STORAGE Help for more info ++# ++CONFIG_USB_STORAGE=m ++# CONFIG_USB_STORAGE_DEBUG is not set ++CONFIG_USB_STORAGE_REALTEK=m ++CONFIG_USB_STORAGE_DATAFAB=m ++CONFIG_USB_STORAGE_FREECOM=m ++CONFIG_USB_STORAGE_ISD200=m ++CONFIG_USB_STORAGE_USBAT=m ++CONFIG_USB_STORAGE_SDDR09=m ++CONFIG_USB_STORAGE_SDDR55=m ++CONFIG_USB_STORAGE_JUMPSHOT=m ++CONFIG_USB_STORAGE_ALAUDA=m ++CONFIG_USB_STORAGE_ONETOUCH=m ++CONFIG_USB_STORAGE_KARMA=m ++CONFIG_USB_STORAGE_CYPRESS_ATACB=m ++CONFIG_USB_STORAGE_ENE_UB6250=m ++CONFIG_USB_UAS=m ++ ++# ++# USB Imaging devices ++# ++CONFIG_USB_MDC800=m ++CONFIG_USB_MICROTEK=m ++CONFIG_USBIP_CORE=m ++CONFIG_USBIP_VHCI_HCD=m ++CONFIG_USBIP_HOST=m ++# CONFIG_USBIP_DEBUG is not set ++CONFIG_USB_MUSB_HDRC=m ++CONFIG_USB_MUSB_HOST=y ++# CONFIG_USB_MUSB_TUSB6010 is not set ++# CONFIG_USB_MUSB_UX500 is not set ++CONFIG_MUSB_PIO_ONLY=y ++CONFIG_USB_DWC3=m ++CONFIG_USB_DWC3_HOST=y ++ ++# ++# Platform Glue Driver Support ++# ++CONFIG_USB_DWC3_PCI=m ++ ++# ++# Debugging features ++# ++# CONFIG_USB_DWC3_DEBUG is not set ++CONFIG_DWC3_HOST_USB3_LPM_ENABLE=y ++CONFIG_USB_DWC2=y ++CONFIG_USB_DWC2_HOST=y ++CONFIG_USB_DWC2_PLATFORM=y ++CONFIG_USB_DWC2_PCI=y ++ ++# ++# Gadget mode requires USB Gadget support to be enabled ++# ++# CONFIG_USB_DWC2_DEBUG is not set ++# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set ++CONFIG_USB_CHIPIDEA=m ++CONFIG_USB_CHIPIDEA_HOST=y ++# CONFIG_USB_CHIPIDEA_DEBUG is not set ++ ++# ++# USB port drivers ++# ++CONFIG_USB_USS720=m ++CONFIG_USB_SERIAL=m ++CONFIG_USB_SERIAL_GENERIC=y ++CONFIG_USB_SERIAL_SIMPLE=m ++CONFIG_USB_SERIAL_AIRCABLE=m ++CONFIG_USB_SERIAL_ARK3116=m ++CONFIG_USB_SERIAL_BELKIN=m ++CONFIG_USB_SERIAL_CH341=m ++CONFIG_USB_SERIAL_WHITEHEAT=m ++CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m ++CONFIG_USB_SERIAL_CP210X=m ++CONFIG_USB_SERIAL_CYPRESS_M8=m ++CONFIG_USB_SERIAL_EMPEG=m ++CONFIG_USB_SERIAL_FTDI_SIO=m ++CONFIG_USB_SERIAL_VISOR=m ++CONFIG_USB_SERIAL_IPAQ=m ++CONFIG_USB_SERIAL_IR=m ++CONFIG_USB_SERIAL_EDGEPORT=m ++CONFIG_USB_SERIAL_EDGEPORT_TI=m ++CONFIG_USB_SERIAL_F81232=m ++CONFIG_USB_SERIAL_GARMIN=m ++CONFIG_USB_SERIAL_IPW=m ++CONFIG_USB_SERIAL_IUU=m ++CONFIG_USB_SERIAL_KEYSPAN_PDA=m ++CONFIG_USB_SERIAL_KEYSPAN=m ++CONFIG_USB_SERIAL_KEYSPAN_MPR=y ++CONFIG_USB_SERIAL_KEYSPAN_USA28=y ++CONFIG_USB_SERIAL_KEYSPAN_USA28X=y ++CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y ++CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y ++CONFIG_USB_SERIAL_KEYSPAN_USA19=y ++CONFIG_USB_SERIAL_KEYSPAN_USA18X=y ++CONFIG_USB_SERIAL_KEYSPAN_USA19W=y ++CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y ++CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y ++CONFIG_USB_SERIAL_KEYSPAN_USA49W=y ++CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y ++CONFIG_USB_SERIAL_KLSI=m ++CONFIG_USB_SERIAL_KOBIL_SCT=m ++CONFIG_USB_SERIAL_MCT_U232=m ++CONFIG_USB_SERIAL_METRO=m ++CONFIG_USB_SERIAL_MOS7720=m ++CONFIG_USB_SERIAL_MOS7715_PARPORT=y ++CONFIG_USB_SERIAL_MOS7840=m ++CONFIG_USB_SERIAL_MXUPORT=m ++CONFIG_USB_SERIAL_NAVMAN=m ++CONFIG_USB_SERIAL_PL2303=m ++CONFIG_USB_SERIAL_OTI6858=m ++CONFIG_USB_SERIAL_QCAUX=m ++CONFIG_USB_SERIAL_QUALCOMM=m ++CONFIG_USB_SERIAL_SPCP8X5=m ++CONFIG_USB_SERIAL_SAFE=m ++# CONFIG_USB_SERIAL_SAFE_PADDED is not set ++CONFIG_USB_SERIAL_SIERRAWIRELESS=m ++CONFIG_USB_SERIAL_SYMBOL=m ++CONFIG_USB_SERIAL_TI=m ++CONFIG_USB_SERIAL_CYBERJACK=m ++CONFIG_USB_SERIAL_XIRCOM=m ++CONFIG_USB_SERIAL_WWAN=m ++CONFIG_USB_SERIAL_OPTION=m ++CONFIG_USB_SERIAL_OMNINET=m ++CONFIG_USB_SERIAL_OPTICON=m ++CONFIG_USB_SERIAL_XSENS_MT=m ++CONFIG_USB_SERIAL_WISHBONE=m ++CONFIG_USB_SERIAL_SSU100=m ++CONFIG_USB_SERIAL_QT2=m ++CONFIG_USB_SERIAL_DEBUG=m ++ ++# ++# USB Miscellaneous drivers ++# ++# CONFIG_USB_EMI62 is not set ++# CONFIG_USB_EMI26 is not set ++# CONFIG_USB_ADUTUX is not set ++# CONFIG_USB_SEVSEG is not set ++# CONFIG_USB_RIO500 is not set ++# CONFIG_USB_LEGOTOWER is not set ++# CONFIG_USB_LCD is not set ++# CONFIG_USB_LED is not set ++# CONFIG_USB_CYPRESS_CY7C63 is not set ++# CONFIG_USB_CYTHERM is not set ++# CONFIG_USB_IDMOUSE is not set ++# CONFIG_USB_FTDI_ELAN is not set ++# CONFIG_USB_APPLEDISPLAY is not set ++# CONFIG_USB_SISUSBVGA is not set ++# CONFIG_USB_LD is not set ++# CONFIG_USB_TRANCEVIBRATOR is not set ++# CONFIG_USB_IOWARRIOR is not set ++# CONFIG_USB_TEST is not set ++# CONFIG_USB_EHSET_TEST_FIXTURE is not set ++# CONFIG_USB_ISIGHTFW is not set ++# CONFIG_USB_YUREX is not set ++CONFIG_USB_EZUSB_FX2=m ++# CONFIG_USB_HSIC_USB3503 is not set ++# CONFIG_USB_LINK_LAYER_TEST is not set ++# CONFIG_USB_ATM is not set ++ ++# ++# USB Physical Layer drivers ++# ++CONFIG_USB_PHY=y ++# CONFIG_NOP_USB_XCEIV is not set ++CONFIG_USB_GPIO_VBUS=m ++# CONFIG_TAHVO_USB is not set ++# CONFIG_USB_ISP1301 is not set ++# CONFIG_USB_GADGET is not set ++CONFIG_USB_LED_TRIG=y ++# CONFIG_UWB is not set ++CONFIG_MMC=y ++# CONFIG_MMC_DEBUG is not set ++# CONFIG_MMC_CLKGATE is not set ++ ++# ++# MMC/SD/SDIO Card Drivers ++# ++CONFIG_MMC_BLOCK=m ++CONFIG_MMC_BLOCK_MINORS=8 ++CONFIG_MMC_BLOCK_BOUNCE=y ++CONFIG_SDIO_UART=m ++# CONFIG_MMC_TEST is not set ++ ++# ++# MMC/SD/SDIO Host Controller Drivers ++# ++CONFIG_MMC_SDHCI=m ++CONFIG_MMC_SDHCI_PCI=m ++CONFIG_MMC_RICOH_MMC=y ++CONFIG_MMC_SDHCI_ACPI=m ++CONFIG_MMC_SDHCI_PLTFM=m ++# CONFIG_MMC_SDHCI_PXAV3 is not set ++# CONFIG_MMC_SDHCI_PXAV2 is not set ++CONFIG_MMC_WBSD=m ++# CONFIG_MMC_TIFM_SD is not set ++CONFIG_MMC_SDRICOH_CS=m ++CONFIG_MMC_CB710=m ++CONFIG_MMC_VIA_SDMMC=m ++CONFIG_MMC_VUB300=m ++CONFIG_MMC_USHC=m ++CONFIG_MMC_USDHI6ROL0=m ++CONFIG_MMC_REALTEK_PCI=m ++CONFIG_MMC_REALTEK_USB=m ++# CONFIG_MEMSTICK is not set ++CONFIG_NEW_LEDS=y ++CONFIG_LEDS_CLASS=y ++ ++# ++# LED drivers ++# ++CONFIG_LEDS_88PM860X=m ++CONFIG_LEDS_LM3530=m ++CONFIG_LEDS_LM3533=m ++CONFIG_LEDS_LM3642=m ++CONFIG_LEDS_PCA9532=m ++CONFIG_LEDS_PCA9532_GPIO=y ++CONFIG_LEDS_GPIO=m ++CONFIG_LEDS_LP3944=m ++CONFIG_LEDS_LP55XX_COMMON=m ++CONFIG_LEDS_LP5521=m ++CONFIG_LEDS_LP5523=m ++CONFIG_LEDS_LP5562=m ++CONFIG_LEDS_LP8501=m ++CONFIG_LEDS_LP8788=m ++CONFIG_LEDS_CLEVO_MAIL=m ++CONFIG_LEDS_PCA955X=m ++CONFIG_LEDS_PCA963X=m ++CONFIG_LEDS_WM831X_STATUS=m ++CONFIG_LEDS_WM8350=m ++CONFIG_LEDS_DA903X=m ++CONFIG_LEDS_DA9052=m ++CONFIG_LEDS_REGULATOR=m ++CONFIG_LEDS_BD2802=m ++CONFIG_LEDS_INTEL_SS4200=m ++CONFIG_LEDS_LT3593=m ++CONFIG_LEDS_ADP5520=m ++CONFIG_LEDS_DELL_NETBOOKS=m ++CONFIG_LEDS_MC13783=m ++CONFIG_LEDS_TCA6507=m ++CONFIG_LEDS_MAX8997=m ++CONFIG_LEDS_LM355x=m ++CONFIG_LEDS_MENF21BMC=m ++ ++# ++# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) ++# ++CONFIG_LEDS_BLINKM=m ++ ++# ++# LED Triggers ++# ++CONFIG_LEDS_TRIGGERS=y ++CONFIG_LEDS_TRIGGER_TIMER=m ++CONFIG_LEDS_TRIGGER_ONESHOT=m ++CONFIG_LEDS_TRIGGER_HEARTBEAT=m ++CONFIG_LEDS_TRIGGER_BACKLIGHT=m ++CONFIG_LEDS_TRIGGER_CPU=y ++CONFIG_LEDS_TRIGGER_GPIO=m ++CONFIG_LEDS_TRIGGER_DEFAULT_ON=m ++ ++# ++# iptables trigger is under Netfilter config (LED target) ++# ++CONFIG_LEDS_TRIGGER_TRANSIENT=m ++CONFIG_LEDS_TRIGGER_CAMERA=m ++# CONFIG_ACCESSIBILITY is not set ++# CONFIG_INFINIBAND is not set ++CONFIG_EDAC=y ++# CONFIG_EDAC_LEGACY_SYSFS is not set ++# CONFIG_EDAC_DEBUG is not set ++CONFIG_EDAC_DECODE_MCE=m ++CONFIG_EDAC_MCE_INJ=m ++CONFIG_EDAC_MM_EDAC=m ++CONFIG_EDAC_AMD64=m ++# CONFIG_EDAC_AMD64_ERROR_INJECTION is not set ++CONFIG_EDAC_E752X=m ++CONFIG_EDAC_I82975X=m ++CONFIG_EDAC_I3000=m ++CONFIG_EDAC_I3200=m ++CONFIG_EDAC_IE31200=m ++CONFIG_EDAC_X38=m ++CONFIG_EDAC_I5400=m ++CONFIG_EDAC_I7CORE=m ++CONFIG_EDAC_I5000=m ++CONFIG_EDAC_I5100=m ++CONFIG_EDAC_I7300=m ++CONFIG_EDAC_SBRIDGE=m ++CONFIG_RTC_LIB=y ++CONFIG_RTC_CLASS=y ++CONFIG_RTC_HCTOSYS=y ++CONFIG_RTC_SYSTOHC=y ++CONFIG_RTC_HCTOSYS_DEVICE="rtc0" ++# CONFIG_RTC_DEBUG is not set ++ ++# ++# RTC interfaces ++# ++CONFIG_RTC_INTF_SYSFS=y ++CONFIG_RTC_INTF_PROC=y ++CONFIG_RTC_INTF_DEV=y ++# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set ++# CONFIG_RTC_DRV_TEST is not set ++ ++# ++# I2C RTC drivers ++# ++CONFIG_RTC_DRV_88PM860X=m ++CONFIG_RTC_DRV_88PM80X=m ++CONFIG_RTC_DRV_DS1307=m ++CONFIG_RTC_DRV_DS1374=m ++CONFIG_RTC_DRV_DS1672=m ++CONFIG_RTC_DRV_DS3232=m ++CONFIG_RTC_DRV_LP8788=m ++CONFIG_RTC_DRV_MAX6900=m ++CONFIG_RTC_DRV_MAX8907=m ++CONFIG_RTC_DRV_MAX8925=m ++CONFIG_RTC_DRV_MAX8998=m ++CONFIG_RTC_DRV_MAX8997=m ++CONFIG_RTC_DRV_MAX77686=m ++CONFIG_RTC_DRV_MAX77802=m ++CONFIG_RTC_DRV_RS5C372=m ++CONFIG_RTC_DRV_ISL1208=m ++CONFIG_RTC_DRV_ISL12022=m ++CONFIG_RTC_DRV_ISL12057=m ++CONFIG_RTC_DRV_X1205=m ++CONFIG_RTC_DRV_PALMAS=m ++CONFIG_RTC_DRV_PCF2127=m ++CONFIG_RTC_DRV_PCF8523=m ++CONFIG_RTC_DRV_PCF8563=m ++CONFIG_RTC_DRV_PCF85063=m ++CONFIG_RTC_DRV_PCF8583=m ++CONFIG_RTC_DRV_M41T80=m ++CONFIG_RTC_DRV_M41T80_WDT=y ++CONFIG_RTC_DRV_BQ32K=m ++CONFIG_RTC_DRV_TWL4030=m ++CONFIG_RTC_DRV_TPS6586X=m ++CONFIG_RTC_DRV_TPS65910=m ++CONFIG_RTC_DRV_TPS80031=m ++CONFIG_RTC_DRV_RC5T583=m ++CONFIG_RTC_DRV_S35390A=m ++CONFIG_RTC_DRV_FM3130=m ++CONFIG_RTC_DRV_RX8581=m ++CONFIG_RTC_DRV_RX8025=m ++CONFIG_RTC_DRV_EM3027=m ++CONFIG_RTC_DRV_RV3029C2=m ++CONFIG_RTC_DRV_S5M=m ++ ++# ++# SPI RTC drivers ++# ++ ++# ++# Platform RTC drivers ++# ++CONFIG_RTC_DRV_CMOS=y ++CONFIG_RTC_DRV_DS1286=m ++CONFIG_RTC_DRV_DS1511=m ++CONFIG_RTC_DRV_DS1553=m ++CONFIG_RTC_DRV_DS1742=m ++CONFIG_RTC_DRV_DS2404=m ++CONFIG_RTC_DRV_DA9052=m ++CONFIG_RTC_DRV_DA9055=m ++CONFIG_RTC_DRV_DA9063=m ++CONFIG_RTC_DRV_STK17TA8=m ++CONFIG_RTC_DRV_M48T86=m ++CONFIG_RTC_DRV_M48T35=m ++CONFIG_RTC_DRV_M48T59=m ++CONFIG_RTC_DRV_MSM6242=m ++CONFIG_RTC_DRV_BQ4802=m ++CONFIG_RTC_DRV_RP5C01=m ++CONFIG_RTC_DRV_V3020=m ++CONFIG_RTC_DRV_WM831X=m ++CONFIG_RTC_DRV_WM8350=m ++CONFIG_RTC_DRV_PCF50633=m ++CONFIG_RTC_DRV_AB3100=m ++ ++# ++# on-CPU RTC drivers ++# ++CONFIG_RTC_DRV_MC13XXX=m ++CONFIG_RTC_DRV_XGENE=y ++ ++# ++# HID Sensor RTC drivers ++# ++CONFIG_RTC_DRV_HID_SENSOR_TIME=m ++CONFIG_DMADEVICES=y ++# CONFIG_DMADEVICES_DEBUG is not set ++ ++# ++# DMA Devices ++# ++CONFIG_INTEL_MIC_X100_DMA=m ++CONFIG_INTEL_MID_DMAC=m ++CONFIG_INTEL_IOATDMA=m ++CONFIG_DW_DMAC_CORE=m ++CONFIG_DW_DMAC=m ++CONFIG_DW_DMAC_PCI=m ++CONFIG_DMA_ENGINE=y ++CONFIG_DMA_ACPI=y ++ ++# ++# DMA Clients ++# ++CONFIG_ASYNC_TX_DMA=y ++# CONFIG_DMATEST is not set ++CONFIG_DMA_ENGINE_RAID=y ++CONFIG_DCA=m ++# CONFIG_AUXDISPLAY is not set ++CONFIG_UIO=m ++CONFIG_UIO_CIF=m ++CONFIG_UIO_PDRV_GENIRQ=m ++CONFIG_UIO_DMEM_GENIRQ=m ++CONFIG_UIO_AEC=m ++CONFIG_UIO_SERCOS3=m ++CONFIG_UIO_PCI_GENERIC=m ++CONFIG_UIO_NETX=m ++CONFIG_UIO_MF624=m ++# CONFIG_VFIO is not set ++CONFIG_VIRT_DRIVERS=y ++CONFIG_VIRTIO=y ++ ++# ++# Virtio drivers ++# ++CONFIG_VIRTIO_PCI=y ++CONFIG_VIRTIO_BALLOON=y ++CONFIG_VIRTIO_MMIO=y ++CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y ++ ++# ++# Microsoft Hyper-V guest support ++# ++CONFIG_HYPERV=m ++CONFIG_HYPERV_UTILS=m ++CONFIG_HYPERV_BALLOON=m ++ ++# ++# Xen driver support ++# ++CONFIG_XEN_BALLOON=y ++CONFIG_XEN_SELFBALLOONING=y ++CONFIG_XEN_BALLOON_MEMORY_HOTPLUG=y ++CONFIG_XEN_SCRUB_PAGES=y ++CONFIG_XEN_DEV_EVTCHN=m ++CONFIG_XEN_BACKEND=y ++CONFIG_XENFS=m ++CONFIG_XEN_COMPAT_XENFS=y ++CONFIG_XEN_SYS_HYPERVISOR=y ++CONFIG_XEN_XENBUS_FRONTEND=y ++CONFIG_XEN_GNTDEV=m ++CONFIG_XEN_GRANT_DEV_ALLOC=m ++CONFIG_SWIOTLB_XEN=y ++CONFIG_XEN_TMEM=m ++CONFIG_XEN_PCIDEV_BACKEND=m ++CONFIG_XEN_SCSI_BACKEND=m ++CONFIG_XEN_PRIVCMD=m ++CONFIG_XEN_ACPI_PROCESSOR=y ++CONFIG_XEN_MCE_LOG=y ++CONFIG_XEN_HAVE_PVMMU=y ++CONFIG_XEN_EFI=y ++# CONFIG_STAGING is not set ++CONFIG_X86_PLATFORM_DEVICES=y ++CONFIG_ACER_WMI=m ++CONFIG_ACERHDF=m ++CONFIG_ALIENWARE_WMI=m ++CONFIG_ASUS_LAPTOP=m ++CONFIG_DELL_LAPTOP=m ++CONFIG_DELL_WMI=m ++CONFIG_DELL_WMI_AIO=m ++CONFIG_DELL_SMO8800=m ++CONFIG_FUJITSU_LAPTOP=m ++# CONFIG_FUJITSU_LAPTOP_DEBUG is not set ++CONFIG_FUJITSU_TABLET=m ++CONFIG_AMILO_RFKILL=m ++CONFIG_HP_ACCEL=m ++CONFIG_HP_WIRELESS=m ++CONFIG_HP_WMI=m ++CONFIG_MSI_LAPTOP=m ++CONFIG_PANASONIC_LAPTOP=m ++CONFIG_COMPAL_LAPTOP=m ++CONFIG_SONY_LAPTOP=m ++CONFIG_SONYPI_COMPAT=y ++CONFIG_IDEAPAD_LAPTOP=m ++CONFIG_THINKPAD_ACPI=m ++CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y ++CONFIG_THINKPAD_ACPI_DEBUGFACILITIES=y ++# CONFIG_THINKPAD_ACPI_DEBUG is not set ++# CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set ++CONFIG_THINKPAD_ACPI_VIDEO=y ++CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y ++CONFIG_SENSORS_HDAPS=m ++CONFIG_INTEL_MENLOW=m ++CONFIG_EEEPC_LAPTOP=m ++CONFIG_ASUS_WMI=m ++CONFIG_ASUS_NB_WMI=m ++CONFIG_EEEPC_WMI=m ++CONFIG_ACPI_WMI=m ++CONFIG_MSI_WMI=m ++CONFIG_TOPSTAR_LAPTOP=m ++CONFIG_ACPI_TOSHIBA=m ++CONFIG_TOSHIBA_BT_RFKILL=m ++CONFIG_TOSHIBA_HAPS=m ++CONFIG_ACPI_CMPC=m ++CONFIG_INTEL_IPS=m ++CONFIG_IBM_RTL=m ++CONFIG_SAMSUNG_LAPTOP=m ++CONFIG_MXM_WMI=m ++CONFIG_INTEL_OAKTRAIL=m ++CONFIG_SAMSUNG_Q10=m ++CONFIG_APPLE_GMUX=m ++CONFIG_INTEL_RST=m ++CONFIG_INTEL_SMARTCONNECT=m ++CONFIG_PVPANIC=m ++# CONFIG_CHROME_PLATFORMS is not set ++ ++# ++# SOC (System On Chip) specific Drivers ++# ++# CONFIG_SOC_TI is not set ++CONFIG_CLKDEV_LOOKUP=y ++CONFIG_HAVE_CLK_PREPARE=y ++CONFIG_COMMON_CLK=y ++ ++# ++# Common Clock Framework ++# ++# CONFIG_COMMON_CLK_WM831X is not set ++# CONFIG_COMMON_CLK_MAX77686 is not set ++# CONFIG_COMMON_CLK_MAX77802 is not set ++# CONFIG_COMMON_CLK_SI5351 is not set ++# CONFIG_COMMON_CLK_S2MPS11 is not set ++# CONFIG_CLK_TWL6040 is not set ++# CONFIG_COMMON_CLK_PALMAS is not set ++# CONFIG_COMMON_CLK_PXA is not set ++ ++# ++# Hardware Spinlock drivers ++# ++ ++# ++# Clock Source drivers ++# ++CONFIG_CLKEVT_I8253=y ++CONFIG_I8253_LOCK=y ++CONFIG_CLKBLD_I8253=y ++# CONFIG_ATMEL_PIT is not set ++# CONFIG_SH_TIMER_CMT is not set ++# CONFIG_SH_TIMER_MTU2 is not set ++# CONFIG_SH_TIMER_TMU is not set ++# CONFIG_EM_TIMER_STI is not set ++# CONFIG_MAILBOX is not set ++CONFIG_IOMMU_API=y ++CONFIG_IOMMU_SUPPORT=y ++CONFIG_AMD_IOMMU=y ++CONFIG_AMD_IOMMU_STATS=y ++CONFIG_AMD_IOMMU_V2=m ++CONFIG_DMAR_TABLE=y ++CONFIG_INTEL_IOMMU=y ++# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set ++CONFIG_INTEL_IOMMU_FLOPPY_WA=y ++CONFIG_IRQ_REMAP=y ++ ++# ++# Remoteproc drivers ++# ++# CONFIG_STE_MODEM_RPROC is not set ++ ++# ++# Rpmsg drivers ++# ++ ++# ++# SOC (System On Chip) specific Drivers ++# ++CONFIG_PM_DEVFREQ=y ++ ++# ++# DEVFREQ Governors ++# ++CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y ++CONFIG_DEVFREQ_GOV_PERFORMANCE=y ++CONFIG_DEVFREQ_GOV_POWERSAVE=y ++CONFIG_DEVFREQ_GOV_USERSPACE=y ++ ++# ++# DEVFREQ Drivers ++# ++CONFIG_EXTCON=y ++ ++# ++# Extcon Device Drivers ++# ++CONFIG_EXTCON_ADC_JACK=m ++CONFIG_EXTCON_GPIO=m ++CONFIG_EXTCON_MAX14577=m ++CONFIG_EXTCON_MAX77693=m ++CONFIG_EXTCON_MAX8997=m ++CONFIG_EXTCON_PALMAS=m ++CONFIG_EXTCON_RT8973A=m ++CONFIG_EXTCON_SM5502=m ++# CONFIG_MEMORY is not set ++CONFIG_IIO=m ++CONFIG_IIO_BUFFER=y ++# CONFIG_IIO_BUFFER_CB is not set ++CONFIG_IIO_KFIFO_BUF=m ++CONFIG_IIO_TRIGGER=y ++CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 ++ ++# ++# Accelerometers ++# ++# CONFIG_BMA180 is not set ++# CONFIG_BMC150_ACCEL is not set ++# CONFIG_HID_SENSOR_ACCEL_3D is not set ++# CONFIG_IIO_ST_ACCEL_3AXIS is not set ++# CONFIG_MMA8452 is not set ++# CONFIG_KXCJK1013 is not set ++ ++# ++# Analog to digital converters ++# ++# CONFIG_AD7291 is not set ++# CONFIG_AD799X is not set ++# CONFIG_LP8788_ADC is not set ++# CONFIG_MAX1363 is not set ++# CONFIG_MCP3422 is not set ++# CONFIG_NAU7802 is not set ++# CONFIG_TI_ADC081C is not set ++# CONFIG_TI_AM335X_ADC is not set ++# CONFIG_TWL4030_MADC is not set ++# CONFIG_TWL6030_GPADC is not set ++# CONFIG_VIPERBOARD_ADC is not set ++ ++# ++# Amplifiers ++# ++ ++# ++# Hid Sensor IIO Common ++# ++CONFIG_HID_SENSOR_IIO_COMMON=m ++CONFIG_HID_SENSOR_IIO_TRIGGER=m ++ ++# ++# Digital to analog converters ++# ++# CONFIG_AD5064 is not set ++# CONFIG_AD5380 is not set ++# CONFIG_AD5446 is not set ++# CONFIG_MAX517 is not set ++# CONFIG_MCP4725 is not set ++ ++# ++# Frequency Synthesizers DDS/PLL ++# ++ ++# ++# Clock Generator/Distribution ++# ++ ++# ++# Phase-Locked Loop (PLL) frequency synthesizers ++# ++ ++# ++# Digital gyroscope sensors ++# ++# CONFIG_BMG160 is not set ++# CONFIG_HID_SENSOR_GYRO_3D is not set ++# CONFIG_IIO_ST_GYRO_3AXIS is not set ++# CONFIG_ITG3200 is not set ++ ++# ++# Humidity sensors ++# ++# CONFIG_DHT11 is not set ++# CONFIG_SI7005 is not set ++ ++# ++# Inertial measurement units ++# ++# CONFIG_INV_MPU6050_IIO is not set ++ ++# ++# Light sensors ++# ++# CONFIG_ADJD_S311 is not set ++# CONFIG_AL3320A is not set ++# CONFIG_APDS9300 is not set ++# CONFIG_CM32181 is not set ++# CONFIG_CM36651 is not set ++# CONFIG_GP2AP020A00F is not set ++# CONFIG_ISL29125 is not set ++# CONFIG_HID_SENSOR_ALS is not set ++# CONFIG_HID_SENSOR_PROX is not set ++# CONFIG_SENSORS_LM3533 is not set ++# CONFIG_LTR501 is not set ++# CONFIG_TCS3414 is not set ++# CONFIG_TCS3472 is not set ++# CONFIG_SENSORS_TSL2563 is not set ++# CONFIG_TSL4531 is not set ++# CONFIG_VCNL4000 is not set ++ ++# ++# Magnetometer sensors ++# ++# CONFIG_AK8975 is not set ++# CONFIG_AK09911 is not set ++# CONFIG_MAG3110 is not set ++# CONFIG_HID_SENSOR_MAGNETOMETER_3D is not set ++# CONFIG_IIO_ST_MAGN_3AXIS is not set ++ ++# ++# Inclinometer sensors ++# ++# CONFIG_HID_SENSOR_INCLINOMETER_3D is not set ++# CONFIG_HID_SENSOR_DEVICE_ROTATION is not set ++ ++# ++# Triggers - standalone ++# ++CONFIG_IIO_INTERRUPT_TRIGGER=m ++CONFIG_IIO_SYSFS_TRIGGER=m ++ ++# ++# Pressure sensors ++# ++# CONFIG_HID_SENSOR_PRESS is not set ++# CONFIG_MPL115 is not set ++# CONFIG_MPL3115 is not set ++# CONFIG_IIO_ST_PRESS is not set ++# CONFIG_T5403 is not set ++ ++# ++# Lightning sensors ++# ++ ++# ++# Temperature sensors ++# ++# CONFIG_MLX90614 is not set ++# CONFIG_TMP006 is not set ++# CONFIG_NTB is not set ++# CONFIG_VME_BUS is not set ++# CONFIG_PWM is not set ++# CONFIG_IPACK_BUS is not set ++CONFIG_RESET_CONTROLLER=y ++# CONFIG_FMC is not set ++ ++# ++# PHY Subsystem ++# ++CONFIG_GENERIC_PHY=y ++CONFIG_BCM_KONA_USB2_PHY=m ++CONFIG_PHY_SAMSUNG_USB2=m ++# CONFIG_PHY_EXYNOS4210_USB2 is not set ++# CONFIG_PHY_EXYNOS4X12_USB2 is not set ++# CONFIG_PHY_EXYNOS5250_USB2 is not set ++CONFIG_POWERCAP=y ++CONFIG_INTEL_RAPL=m ++# CONFIG_MCB is not set ++CONFIG_RAS=y ++# CONFIG_THUNDERBOLT is not set ++ ++# ++# Firmware Drivers ++# ++CONFIG_EDD=y ++CONFIG_EDD_OFF=y ++CONFIG_FIRMWARE_MEMMAP=y ++CONFIG_DELL_RBU=m ++CONFIG_DCDBAS=m ++CONFIG_DMIID=y ++CONFIG_DMI_SYSFS=m ++CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y ++CONFIG_ISCSI_IBFT_FIND=y ++CONFIG_ISCSI_IBFT=m ++# CONFIG_GOOGLE_FIRMWARE is not set ++ ++# ++# EFI (Extensible Firmware Interface) Support ++# ++CONFIG_EFI_VARS=y ++CONFIG_EFI_VARS_PSTORE=m ++# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set ++CONFIG_EFI_RUNTIME_MAP=y ++CONFIG_EFI_RUNTIME_WRAPPERS=y ++CONFIG_UEFI_CPER=y ++ ++# ++# File systems ++# ++CONFIG_DCACHE_WORD_ACCESS=y ++CONFIG_EXT2_FS=m ++CONFIG_EXT2_FS_XATTR=y ++CONFIG_EXT2_FS_POSIX_ACL=y ++CONFIG_EXT2_FS_SECURITY=y ++# CONFIG_EXT2_FS_XIP is not set ++CONFIG_EXT3_FS=m ++CONFIG_EXT3_DEFAULTS_TO_ORDERED=y ++CONFIG_EXT3_FS_XATTR=y ++# CONFIG_EXT3_FS_POSIX_ACL is not set ++# CONFIG_EXT3_FS_SECURITY is not set ++CONFIG_EXT4_FS=y ++CONFIG_EXT4_FS_POSIX_ACL=y ++CONFIG_EXT4_FS_SECURITY=y ++# CONFIG_EXT4_DEBUG is not set ++CONFIG_JBD=m ++# CONFIG_JBD_DEBUG is not set ++CONFIG_JBD2=y ++# CONFIG_JBD2_DEBUG is not set ++CONFIG_FS_MBCACHE=y ++CONFIG_REISERFS_FS=m ++# CONFIG_REISERFS_CHECK is not set ++# CONFIG_REISERFS_PROC_INFO is not set ++CONFIG_REISERFS_FS_XATTR=y ++CONFIG_REISERFS_FS_POSIX_ACL=y ++CONFIG_REISERFS_FS_SECURITY=y ++CONFIG_JFS_FS=m ++CONFIG_JFS_POSIX_ACL=y ++CONFIG_JFS_SECURITY=y ++# CONFIG_JFS_DEBUG is not set ++CONFIG_JFS_STATISTICS=y ++CONFIG_XFS_FS=m ++CONFIG_XFS_QUOTA=y ++CONFIG_XFS_POSIX_ACL=y ++CONFIG_XFS_RT=y ++# CONFIG_XFS_WARN is not set ++# CONFIG_XFS_DEBUG is not set ++# CONFIG_GFS2_FS is not set ++# CONFIG_OCFS2_FS is not set ++CONFIG_BTRFS_FS=m ++CONFIG_BTRFS_FS_POSIX_ACL=y ++# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set ++# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set ++# CONFIG_BTRFS_DEBUG is not set ++# CONFIG_BTRFS_ASSERT is not set ++# CONFIG_NILFS2_FS is not set ++CONFIG_FS_POSIX_ACL=y ++CONFIG_EXPORTFS=y ++CONFIG_FILE_LOCKING=y ++CONFIG_FSNOTIFY=y ++CONFIG_DNOTIFY=y ++CONFIG_INOTIFY_USER=y ++CONFIG_FANOTIFY=y ++CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y ++CONFIG_QUOTA=y ++CONFIG_QUOTA_NETLINK_INTERFACE=y ++# CONFIG_PRINT_QUOTA_WARNING is not set ++# CONFIG_QUOTA_DEBUG is not set ++CONFIG_QUOTA_TREE=m ++CONFIG_QFMT_V1=m ++CONFIG_QFMT_V2=m ++CONFIG_QUOTACTL=y ++CONFIG_QUOTACTL_COMPAT=y ++CONFIG_AUTOFS4_FS=m ++CONFIG_FUSE_FS=y ++CONFIG_CUSE=m ++CONFIG_OVERLAY_FS=m ++ ++# ++# Caches ++# ++CONFIG_FSCACHE=m ++CONFIG_FSCACHE_STATS=y ++# CONFIG_FSCACHE_HISTOGRAM is not set ++# CONFIG_FSCACHE_DEBUG is not set ++# CONFIG_FSCACHE_OBJECT_LIST is not set ++CONFIG_CACHEFILES=m ++# CONFIG_CACHEFILES_DEBUG is not set ++# CONFIG_CACHEFILES_HISTOGRAM is not set ++ ++# ++# CD-ROM/DVD Filesystems ++# ++CONFIG_ISO9660_FS=m ++CONFIG_JOLIET=y ++CONFIG_ZISOFS=y ++CONFIG_UDF_FS=m ++CONFIG_UDF_NLS=y ++ ++# ++# DOS/FAT/NT Filesystems ++# ++CONFIG_FAT_FS=y ++CONFIG_MSDOS_FS=m ++CONFIG_VFAT_FS=y ++CONFIG_FAT_DEFAULT_CODEPAGE=437 ++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" ++CONFIG_NTFS_FS=m ++# CONFIG_NTFS_DEBUG is not set ++# CONFIG_NTFS_RW is not set ++ ++# ++# Pseudo filesystems ++# ++CONFIG_PROC_FS=y ++CONFIG_PROC_KCORE=y ++CONFIG_PROC_VMCORE=y ++CONFIG_PROC_SYSCTL=y ++CONFIG_PROC_PAGE_MONITOR=y ++CONFIG_KERNFS=y ++CONFIG_SYSFS=y ++CONFIG_TMPFS=y ++CONFIG_TMPFS_POSIX_ACL=y ++CONFIG_TMPFS_XATTR=y ++CONFIG_HUGETLBFS=y ++CONFIG_HUGETLB_PAGE=y ++CONFIG_CONFIGFS_FS=m ++CONFIG_MISC_FILESYSTEMS=y ++# CONFIG_ADFS_FS is not set ++# CONFIG_AFFS_FS is not set ++CONFIG_ECRYPT_FS=y ++CONFIG_ECRYPT_FS_MESSAGING=y ++# CONFIG_HFS_FS is not set ++# CONFIG_HFSPLUS_FS is not set ++# CONFIG_BEFS_FS is not set ++# CONFIG_BFS_FS is not set ++# CONFIG_EFS_FS is not set ++CONFIG_JFFS2_FS=m ++CONFIG_JFFS2_FS_DEBUG=0 ++CONFIG_JFFS2_FS_WRITEBUFFER=y ++# CONFIG_JFFS2_FS_WBUF_VERIFY is not set ++# CONFIG_JFFS2_SUMMARY is not set ++CONFIG_JFFS2_FS_XATTR=y ++CONFIG_JFFS2_FS_POSIX_ACL=y ++CONFIG_JFFS2_FS_SECURITY=y ++CONFIG_JFFS2_COMPRESSION_OPTIONS=y ++CONFIG_JFFS2_ZLIB=y ++CONFIG_JFFS2_LZO=y ++CONFIG_JFFS2_RTIME=y ++# CONFIG_JFFS2_RUBIN is not set ++# CONFIG_JFFS2_CMODE_NONE is not set ++# CONFIG_JFFS2_CMODE_PRIORITY is not set ++# CONFIG_JFFS2_CMODE_SIZE is not set ++CONFIG_JFFS2_CMODE_FAVOURLZO=y ++# CONFIG_UBIFS_FS is not set ++# CONFIG_LOGFS is not set ++# CONFIG_CRAMFS is not set ++# CONFIG_SQUASHFS is not set ++# CONFIG_VXFS_FS is not set ++# CONFIG_MINIX_FS is not set ++# CONFIG_OMFS_FS is not set ++# CONFIG_HPFS_FS is not set ++# CONFIG_QNX4FS_FS is not set ++# CONFIG_QNX6FS_FS is not set ++# CONFIG_ROMFS_FS is not set ++CONFIG_PSTORE=y ++# CONFIG_PSTORE_CONSOLE is not set ++CONFIG_PSTORE_RAM=y ++# CONFIG_SYSV_FS is not set ++# CONFIG_UFS_FS is not set ++# CONFIG_EXOFS_FS is not set ++# CONFIG_F2FS_FS is not set ++# CONFIG_EFIVAR_FS is not set ++CONFIG_ORE=m ++CONFIG_NETWORK_FILESYSTEMS=y ++CONFIG_NFS_FS=m ++CONFIG_NFS_V2=m ++CONFIG_NFS_V3=m ++CONFIG_NFS_V3_ACL=y ++CONFIG_NFS_V4=m ++CONFIG_NFS_SWAP=y ++CONFIG_NFS_V4_1=y ++CONFIG_NFS_V4_2=y ++CONFIG_PNFS_FILE_LAYOUT=m ++CONFIG_PNFS_BLOCK=m ++CONFIG_PNFS_OBJLAYOUT=m ++CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" ++CONFIG_NFS_V4_1_MIGRATION=y ++CONFIG_NFS_V4_SECURITY_LABEL=y ++CONFIG_NFS_FSCACHE=y ++# CONFIG_NFS_USE_LEGACY_DNS is not set ++CONFIG_NFS_USE_KERNEL_DNS=y ++CONFIG_NFS_DEBUG=y ++CONFIG_NFSD=m ++CONFIG_NFSD_V2_ACL=y ++CONFIG_NFSD_V3=y ++CONFIG_NFSD_V3_ACL=y ++CONFIG_NFSD_V4=y ++CONFIG_NFSD_V4_SECURITY_LABEL=y ++# CONFIG_NFSD_FAULT_INJECTION is not set ++CONFIG_GRACE_PERIOD=m ++CONFIG_LOCKD=m ++CONFIG_LOCKD_V4=y ++CONFIG_NFS_ACL_SUPPORT=m ++CONFIG_NFS_COMMON=y ++CONFIG_SUNRPC=m ++CONFIG_SUNRPC_GSS=m ++CONFIG_SUNRPC_BACKCHANNEL=y ++CONFIG_SUNRPC_SWAP=y ++CONFIG_RPCSEC_GSS_KRB5=m ++CONFIG_SUNRPC_DEBUG=y ++CONFIG_CEPH_FS=m ++CONFIG_CEPH_FSCACHE=y ++CONFIG_CEPH_FS_POSIX_ACL=y ++CONFIG_CIFS=m ++CONFIG_CIFS_STATS=y ++# CONFIG_CIFS_STATS2 is not set ++CONFIG_CIFS_WEAK_PW_HASH=y ++CONFIG_CIFS_UPCALL=y ++CONFIG_CIFS_XATTR=y ++CONFIG_CIFS_POSIX=y ++CONFIG_CIFS_ACL=y ++# CONFIG_CIFS_DEBUG is not set ++CONFIG_CIFS_DFS_UPCALL=y ++CONFIG_CIFS_SMB2=y ++CONFIG_CIFS_FSCACHE=y ++# CONFIG_NCP_FS is not set ++# CONFIG_CODA_FS is not set ++# CONFIG_AFS_FS is not set ++CONFIG_NLS=y ++CONFIG_NLS_DEFAULT="utf8" ++CONFIG_NLS_CODEPAGE_437=y ++# CONFIG_NLS_CODEPAGE_737 is not set ++# CONFIG_NLS_CODEPAGE_775 is not set ++CONFIG_NLS_CODEPAGE_850=m ++# CONFIG_NLS_CODEPAGE_852 is not set ++# CONFIG_NLS_CODEPAGE_855 is not set ++# CONFIG_NLS_CODEPAGE_857 is not set ++# CONFIG_NLS_CODEPAGE_860 is not set ++# CONFIG_NLS_CODEPAGE_861 is not set ++# CONFIG_NLS_CODEPAGE_862 is not set ++# CONFIG_NLS_CODEPAGE_863 is not set ++# CONFIG_NLS_CODEPAGE_864 is not set ++# CONFIG_NLS_CODEPAGE_865 is not set ++CONFIG_NLS_CODEPAGE_866=m ++# CONFIG_NLS_CODEPAGE_869 is not set ++# CONFIG_NLS_CODEPAGE_936 is not set ++# CONFIG_NLS_CODEPAGE_950 is not set ++# CONFIG_NLS_CODEPAGE_932 is not set ++# CONFIG_NLS_CODEPAGE_949 is not set ++# CONFIG_NLS_CODEPAGE_874 is not set ++# CONFIG_NLS_ISO8859_8 is not set ++# CONFIG_NLS_CODEPAGE_1250 is not set ++# CONFIG_NLS_CODEPAGE_1251 is not set ++CONFIG_NLS_ASCII=m ++CONFIG_NLS_ISO8859_1=m ++# CONFIG_NLS_ISO8859_2 is not set ++# CONFIG_NLS_ISO8859_3 is not set ++# CONFIG_NLS_ISO8859_4 is not set ++# CONFIG_NLS_ISO8859_5 is not set ++# CONFIG_NLS_ISO8859_6 is not set ++# CONFIG_NLS_ISO8859_7 is not set ++# CONFIG_NLS_ISO8859_9 is not set ++# CONFIG_NLS_ISO8859_13 is not set ++# CONFIG_NLS_ISO8859_14 is not set ++# CONFIG_NLS_ISO8859_15 is not set ++# CONFIG_NLS_KOI8_R is not set ++CONFIG_NLS_KOI8_U=m ++CONFIG_NLS_MAC_ROMAN=m ++# CONFIG_NLS_MAC_CELTIC is not set ++# CONFIG_NLS_MAC_CENTEURO is not set ++# CONFIG_NLS_MAC_CROATIAN is not set ++# CONFIG_NLS_MAC_CYRILLIC is not set ++# CONFIG_NLS_MAC_GAELIC is not set ++# CONFIG_NLS_MAC_GREEK is not set ++# CONFIG_NLS_MAC_ICELAND is not set ++# CONFIG_NLS_MAC_INUIT is not set ++# CONFIG_NLS_MAC_ROMANIAN is not set ++# CONFIG_NLS_MAC_TURKISH is not set ++CONFIG_NLS_UTF8=m ++# CONFIG_DLM is not set ++ ++# ++# Kernel hacking ++# ++CONFIG_TRACE_IRQFLAGS_SUPPORT=y ++ ++# ++# printk and dmesg options ++# ++CONFIG_PRINTK_TIME=y ++CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 ++CONFIG_BOOT_PRINTK_DELAY=y ++# CONFIG_DYNAMIC_DEBUG is not set ++ ++# ++# Compile-time checks and compiler options ++# ++# CONFIG_DEBUG_INFO is not set ++# CONFIG_ENABLE_WARN_DEPRECATED is not set ++# CONFIG_ENABLE_MUST_CHECK is not set ++CONFIG_FRAME_WARN=1024 ++# CONFIG_STRIP_ASM_SYMS is not set ++# CONFIG_READABLE_ASM is not set ++CONFIG_UNUSED_SYMBOLS=y ++CONFIG_DEBUG_FS=y ++# CONFIG_HEADERS_CHECK is not set ++# CONFIG_DEBUG_SECTION_MISMATCH is not set ++CONFIG_ARCH_WANT_FRAME_POINTERS=y ++CONFIG_FRAME_POINTER=y ++# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set ++CONFIG_MAGIC_SYSRQ=y ++CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 ++CONFIG_DEBUG_KERNEL=y ++ ++# ++# Memory Debugging ++# ++# CONFIG_DEBUG_PAGEALLOC is not set ++# CONFIG_DEBUG_OBJECTS is not set ++# CONFIG_SLUB_STATS is not set ++CONFIG_HAVE_DEBUG_KMEMLEAK=y ++# CONFIG_DEBUG_KMEMLEAK is not set ++# CONFIG_DEBUG_STACK_USAGE is not set ++# CONFIG_DEBUG_VM is not set ++# CONFIG_DEBUG_VIRTUAL is not set ++# CONFIG_DEBUG_MEMORY_INIT is not set ++# CONFIG_DEBUG_PER_CPU_MAPS is not set ++CONFIG_HAVE_DEBUG_STACKOVERFLOW=y ++# CONFIG_DEBUG_STACKOVERFLOW is not set ++CONFIG_HAVE_ARCH_KMEMCHECK=y ++# CONFIG_KMEMCHECK is not set ++# CONFIG_DEBUG_SHIRQ is not set ++ ++# ++# Debug Lockups and Hangs ++# ++CONFIG_LOCKUP_DETECTOR=y ++CONFIG_HARDLOCKUP_DETECTOR=y ++# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set ++CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=0 ++# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set ++CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 ++CONFIG_DETECT_HUNG_TASK=y ++CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 ++# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set ++CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 ++# CONFIG_PANIC_ON_OOPS is not set ++CONFIG_PANIC_ON_OOPS_VALUE=0 ++CONFIG_PANIC_TIMEOUT=0 ++# CONFIG_SCHED_DEBUG is not set ++# CONFIG_SCHEDSTATS is not set ++# CONFIG_SCHED_STACK_END_CHECK is not set ++# CONFIG_TIMER_STATS is not set ++ ++# ++# Lock Debugging (spinlocks, mutexes, etc...) ++# ++# CONFIG_DEBUG_RT_MUTEXES is not set ++# CONFIG_DEBUG_SPINLOCK is not set ++# CONFIG_DEBUG_MUTEXES is not set ++# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set ++# CONFIG_DEBUG_LOCK_ALLOC is not set ++# CONFIG_PROVE_LOCKING is not set ++# CONFIG_LOCK_STAT is not set ++# CONFIG_DEBUG_ATOMIC_SLEEP is not set ++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set ++# CONFIG_LOCK_TORTURE_TEST is not set ++CONFIG_STACKTRACE=y ++# CONFIG_DEBUG_KOBJECT is not set ++CONFIG_DEBUG_BUGVERBOSE=y ++# CONFIG_DEBUG_LIST is not set ++# CONFIG_DEBUG_PI_LIST is not set ++# CONFIG_DEBUG_SG is not set ++# CONFIG_DEBUG_NOTIFIERS is not set ++# CONFIG_DEBUG_CREDENTIALS is not set ++ ++# ++# RCU Debugging ++# ++# CONFIG_SPARSE_RCU_POINTER is not set ++# CONFIG_TORTURE_TEST is not set ++# CONFIG_RCU_TORTURE_TEST is not set ++CONFIG_RCU_CPU_STALL_TIMEOUT=60 ++# CONFIG_RCU_CPU_STALL_INFO is not set ++# CONFIG_RCU_TRACE is not set ++# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set ++# CONFIG_NOTIFIER_ERROR_INJECTION is not set ++# CONFIG_FAULT_INJECTION is not set ++# CONFIG_LATENCYTOP is not set ++CONFIG_ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS=y ++# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set ++CONFIG_USER_STACKTRACE_SUPPORT=y ++CONFIG_HAVE_FUNCTION_TRACER=y ++CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y ++CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y ++CONFIG_HAVE_DYNAMIC_FTRACE=y ++CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y ++CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y ++CONFIG_HAVE_SYSCALL_TRACEPOINTS=y ++CONFIG_HAVE_FENTRY=y ++CONFIG_HAVE_C_RECORDMCOUNT=y ++CONFIG_TRACE_CLOCK=y ++CONFIG_RING_BUFFER=y ++CONFIG_RING_BUFFER_ALLOW_SWAP=y ++CONFIG_TRACING_SUPPORT=y ++# CONFIG_FTRACE is not set ++ ++# ++# Runtime Testing ++# ++# CONFIG_LKDTM is not set ++# CONFIG_TEST_LIST_SORT is not set ++# CONFIG_KPROBES_SANITY_TEST is not set ++# CONFIG_BACKTRACE_SELF_TEST is not set ++CONFIG_RBTREE_TEST=m ++CONFIG_INTERVAL_TREE_TEST=m ++CONFIG_PERCPU_TEST=m ++# CONFIG_ATOMIC64_SELFTEST is not set ++CONFIG_ASYNC_RAID6_TEST=m ++CONFIG_TEST_STRING_HELPERS=m ++CONFIG_TEST_KSTRTOX=m ++# CONFIG_TEST_RHASHTABLE is not set ++# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set ++# CONFIG_DMA_API_DEBUG is not set ++# CONFIG_TEST_LKM is not set ++# CONFIG_TEST_USER_COPY is not set ++# CONFIG_TEST_BPF is not set ++CONFIG_TEST_FIRMWARE=y ++# CONFIG_TEST_UDELAY is not set ++# CONFIG_SAMPLES is not set ++CONFIG_HAVE_ARCH_KGDB=y ++CONFIG_KGDB=y ++CONFIG_KGDB_SERIAL_CONSOLE=y ++# CONFIG_KGDB_TESTS is not set ++CONFIG_KGDB_LOW_LEVEL_TRAP=y ++CONFIG_KGDB_KDB=y ++CONFIG_KDB_KEYBOARD=y ++CONFIG_KDB_CONTINUE_CATASTROPHIC=0 ++CONFIG_STRICT_DEVMEM=y ++# CONFIG_X86_VERBOSE_BOOTUP is not set ++CONFIG_EARLY_PRINTK=y ++CONFIG_EARLY_PRINTK_DBGP=y ++CONFIG_EARLY_PRINTK_EFI=y ++# CONFIG_X86_PTDUMP is not set ++CONFIG_DEBUG_RODATA=y ++# CONFIG_DEBUG_RODATA_TEST is not set ++CONFIG_DEBUG_SET_MODULE_RONX=y ++# CONFIG_DEBUG_NX_TEST is not set ++CONFIG_DOUBLEFAULT=y ++# CONFIG_DEBUG_TLBFLUSH is not set ++# CONFIG_IOMMU_DEBUG is not set ++# CONFIG_IOMMU_STRESS is not set ++CONFIG_HAVE_MMIOTRACE_SUPPORT=y ++# CONFIG_X86_DECODER_SELFTEST is not set ++CONFIG_IO_DELAY_TYPE_0X80=0 ++CONFIG_IO_DELAY_TYPE_0XED=1 ++CONFIG_IO_DELAY_TYPE_UDELAY=2 ++CONFIG_IO_DELAY_TYPE_NONE=3 ++# CONFIG_IO_DELAY_0X80 is not set ++CONFIG_IO_DELAY_0XED=y ++# CONFIG_IO_DELAY_UDELAY is not set ++# CONFIG_IO_DELAY_NONE is not set ++CONFIG_DEFAULT_IO_DELAY_TYPE=1 ++# CONFIG_DEBUG_BOOT_PARAMS is not set ++# CONFIG_CPA_DEBUG is not set ++CONFIG_OPTIMIZE_INLINING=y ++# CONFIG_DEBUG_NMI_SELFTEST is not set ++# CONFIG_X86_DEBUG_STATIC_CPU_HAS is not set ++ ++# ++# Security options ++# ++CONFIG_KEYS=y ++CONFIG_PERSISTENT_KEYRINGS=y ++CONFIG_BIG_KEYS=y ++CONFIG_TRUSTED_KEYS=y ++CONFIG_ENCRYPTED_KEYS=y ++CONFIG_KEYS_DEBUG_PROC_KEYS=y ++# CONFIG_SECURITY_DMESG_RESTRICT is not set ++CONFIG_SECURITY=y ++CONFIG_SECURITYFS=y ++CONFIG_SECURITY_NETWORK=y ++# CONFIG_SECURITY_NETWORK_XFRM is not set ++CONFIG_SECURITY_PATH=y ++CONFIG_INTEL_TXT=y ++CONFIG_LSM_MMAP_MIN_ADDR=0 ++CONFIG_SECURITY_SELINUX=y ++CONFIG_SECURITY_SELINUX_BOOTPARAM=y ++CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0 ++CONFIG_SECURITY_SELINUX_DISABLE=y ++CONFIG_SECURITY_SELINUX_DEVELOP=y ++CONFIG_SECURITY_SELINUX_AVC_STATS=y ++CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 ++# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set ++# CONFIG_SECURITY_SMACK is not set ++# CONFIG_SECURITY_TOMOYO is not set ++CONFIG_SECURITY_APPARMOR=y ++CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1 ++CONFIG_SECURITY_APPARMOR_HASH=y ++# CONFIG_SECURITY_YAMA is not set ++CONFIG_SECURITY_DSB=y ++# CONFIG_INTEGRITY is not set ++# CONFIG_DEFAULT_SECURITY_SELINUX is not set ++# CONFIG_DEFAULT_SECURITY_APPARMOR is not set ++CONFIG_DEFAULT_SECURITY_DSB=y ++# CONFIG_DEFAULT_SECURITY_DAC is not set ++CONFIG_DEFAULT_SECURITY="dsb" ++CONFIG_XOR_BLOCKS=m ++CONFIG_ASYNC_CORE=m ++CONFIG_ASYNC_MEMCPY=m ++CONFIG_ASYNC_XOR=m ++CONFIG_ASYNC_PQ=m ++CONFIG_ASYNC_RAID6_RECOV=m ++CONFIG_CRYPTO=y ++ ++# ++# Crypto core or helper ++# ++CONFIG_CRYPTO_ALGAPI=y ++CONFIG_CRYPTO_ALGAPI2=y ++CONFIG_CRYPTO_AEAD=m ++CONFIG_CRYPTO_AEAD2=y ++CONFIG_CRYPTO_BLKCIPHER=y ++CONFIG_CRYPTO_BLKCIPHER2=y ++CONFIG_CRYPTO_HASH=y ++CONFIG_CRYPTO_HASH2=y ++CONFIG_CRYPTO_RNG=y ++CONFIG_CRYPTO_RNG2=y ++CONFIG_CRYPTO_PCOMP=m ++CONFIG_CRYPTO_PCOMP2=y ++CONFIG_CRYPTO_MANAGER=y ++CONFIG_CRYPTO_MANAGER2=y ++CONFIG_CRYPTO_USER=m ++CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y ++CONFIG_CRYPTO_GF128MUL=m ++CONFIG_CRYPTO_NULL=m ++CONFIG_CRYPTO_PCRYPT=m ++CONFIG_CRYPTO_WORKQUEUE=y ++CONFIG_CRYPTO_CRYPTD=m ++CONFIG_CRYPTO_MCRYPTD=m ++CONFIG_CRYPTO_AUTHENC=m ++CONFIG_CRYPTO_TEST=m ++CONFIG_CRYPTO_ABLK_HELPER=m ++CONFIG_CRYPTO_GLUE_HELPER_X86=m ++ ++# ++# Authenticated Encryption with Associated Data ++# ++CONFIG_CRYPTO_CCM=m ++CONFIG_CRYPTO_GCM=m ++CONFIG_CRYPTO_SEQIV=m ++ ++# ++# Block modes ++# ++CONFIG_CRYPTO_CBC=y ++CONFIG_CRYPTO_CTR=m ++CONFIG_CRYPTO_CTS=m ++CONFIG_CRYPTO_ECB=y ++CONFIG_CRYPTO_LRW=m ++CONFIG_CRYPTO_PCBC=m ++CONFIG_CRYPTO_XTS=m ++ ++# ++# Hash modes ++# ++CONFIG_CRYPTO_CMAC=m ++CONFIG_CRYPTO_HMAC=y ++CONFIG_CRYPTO_XCBC=m ++CONFIG_CRYPTO_VMAC=m ++ ++# ++# Digest ++# ++CONFIG_CRYPTO_CRC32C=y ++CONFIG_CRYPTO_CRC32C_INTEL=y ++CONFIG_CRYPTO_CRC32=m ++CONFIG_CRYPTO_CRC32_PCLMUL=m ++CONFIG_CRYPTO_CRCT10DIF=y ++CONFIG_CRYPTO_CRCT10DIF_PCLMUL=m ++CONFIG_CRYPTO_GHASH=m ++CONFIG_CRYPTO_MD4=m ++CONFIG_CRYPTO_MD5=y ++CONFIG_CRYPTO_MICHAEL_MIC=m ++CONFIG_CRYPTO_RMD128=m ++CONFIG_CRYPTO_RMD160=m ++CONFIG_CRYPTO_RMD256=m ++CONFIG_CRYPTO_RMD320=m ++CONFIG_CRYPTO_SHA1=y ++CONFIG_CRYPTO_SHA1_SSSE3=m ++CONFIG_CRYPTO_SHA256_SSSE3=m ++CONFIG_CRYPTO_SHA512_SSSE3=m ++CONFIG_CRYPTO_SHA1_MB=m ++CONFIG_CRYPTO_SHA256=y ++CONFIG_CRYPTO_SHA512=y ++CONFIG_CRYPTO_TGR192=m ++CONFIG_CRYPTO_WP512=m ++CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m ++ ++# ++# Ciphers ++# ++CONFIG_CRYPTO_AES=y ++CONFIG_CRYPTO_AES_X86_64=m ++CONFIG_CRYPTO_AES_NI_INTEL=m ++CONFIG_CRYPTO_ANUBIS=m ++CONFIG_CRYPTO_ARC4=m ++CONFIG_CRYPTO_BLOWFISH=m ++CONFIG_CRYPTO_BLOWFISH_COMMON=m ++CONFIG_CRYPTO_BLOWFISH_X86_64=m ++CONFIG_CRYPTO_CAMELLIA=m ++CONFIG_CRYPTO_CAMELLIA_X86_64=m ++CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64=m ++CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64=m ++CONFIG_CRYPTO_CAST_COMMON=m ++CONFIG_CRYPTO_CAST5=m ++CONFIG_CRYPTO_CAST5_AVX_X86_64=m ++CONFIG_CRYPTO_CAST6=m ++CONFIG_CRYPTO_CAST6_AVX_X86_64=m ++CONFIG_CRYPTO_DES=m ++CONFIG_CRYPTO_DES3_EDE_X86_64=m ++CONFIG_CRYPTO_FCRYPT=m ++CONFIG_CRYPTO_KHAZAD=m ++CONFIG_CRYPTO_SALSA20=m ++CONFIG_CRYPTO_SALSA20_X86_64=m ++CONFIG_CRYPTO_SEED=m ++CONFIG_CRYPTO_SERPENT=m ++CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m ++CONFIG_CRYPTO_SERPENT_AVX_X86_64=m ++CONFIG_CRYPTO_SERPENT_AVX2_X86_64=m ++CONFIG_CRYPTO_TEA=m ++CONFIG_CRYPTO_TWOFISH=m ++CONFIG_CRYPTO_TWOFISH_COMMON=m ++CONFIG_CRYPTO_TWOFISH_X86_64=m ++CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=m ++CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m ++ ++# ++# Compression ++# ++CONFIG_CRYPTO_DEFLATE=m ++CONFIG_CRYPTO_ZLIB=m ++CONFIG_CRYPTO_LZO=y ++CONFIG_CRYPTO_LZ4=m ++CONFIG_CRYPTO_LZ4HC=m ++ ++# ++# Random Number Generation ++# ++CONFIG_CRYPTO_ANSI_CPRNG=m ++CONFIG_CRYPTO_DRBG_MENU=m ++CONFIG_CRYPTO_DRBG_HMAC=y ++CONFIG_CRYPTO_DRBG_HASH=y ++CONFIG_CRYPTO_DRBG_CTR=y ++CONFIG_CRYPTO_DRBG=m ++CONFIG_CRYPTO_USER_API=m ++CONFIG_CRYPTO_USER_API_HASH=m ++CONFIG_CRYPTO_USER_API_SKCIPHER=m ++CONFIG_CRYPTO_HASH_INFO=y ++CONFIG_CRYPTO_HW=y ++CONFIG_CRYPTO_DEV_PADLOCK=y ++CONFIG_CRYPTO_DEV_PADLOCK_AES=m ++CONFIG_CRYPTO_DEV_PADLOCK_SHA=m ++CONFIG_CRYPTO_DEV_CCP=y ++CONFIG_CRYPTO_DEV_CCP_DD=m ++CONFIG_CRYPTO_DEV_CCP_CRYPTO=m ++CONFIG_CRYPTO_DEV_QAT=m ++CONFIG_CRYPTO_DEV_QAT_DH895xCC=m ++CONFIG_ASYMMETRIC_KEY_TYPE=y ++CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y ++CONFIG_PUBLIC_KEY_ALGO_RSA=y ++CONFIG_X509_CERTIFICATE_PARSER=y ++CONFIG_PKCS7_MESSAGE_PARSER=m ++CONFIG_PKCS7_TEST_KEY=m ++CONFIG_HAVE_KVM=y ++CONFIG_HAVE_KVM_IRQCHIP=y ++CONFIG_HAVE_KVM_IRQFD=y ++CONFIG_HAVE_KVM_IRQ_ROUTING=y ++CONFIG_HAVE_KVM_EVENTFD=y ++CONFIG_KVM_APIC_ARCHITECTURE=y ++CONFIG_KVM_MMIO=y ++CONFIG_KVM_ASYNC_PF=y ++CONFIG_HAVE_KVM_MSI=y ++CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y ++CONFIG_KVM_VFIO=y ++CONFIG_VIRTUALIZATION=y ++CONFIG_KVM=m ++CONFIG_KVM_INTEL=m ++CONFIG_KVM_AMD=m ++CONFIG_KVM_DEVICE_ASSIGNMENT=y ++# CONFIG_BINARY_PRINTF is not set ++ ++# ++# Library routines ++# ++CONFIG_RAID6_PQ=m ++CONFIG_BITREVERSE=y ++CONFIG_GENERIC_STRNCPY_FROM_USER=y ++CONFIG_GENERIC_STRNLEN_USER=y ++CONFIG_GENERIC_NET_UTILS=y ++CONFIG_GENERIC_FIND_FIRST_BIT=y ++CONFIG_GENERIC_PCI_IOMAP=y ++CONFIG_GENERIC_IOMAP=y ++CONFIG_GENERIC_IO=y ++CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y ++CONFIG_ARCH_HAS_FAST_MULTIPLIER=y ++CONFIG_CRC_CCITT=m ++CONFIG_CRC16=y ++CONFIG_CRC_T10DIF=y ++CONFIG_CRC_ITU_T=m ++CONFIG_CRC32=y ++# CONFIG_CRC32_SELFTEST is not set ++CONFIG_CRC32_SLICEBY8=y ++# CONFIG_CRC32_SLICEBY4 is not set ++# CONFIG_CRC32_SARWATE is not set ++# CONFIG_CRC32_BIT is not set ++CONFIG_CRC7=m ++CONFIG_LIBCRC32C=m ++CONFIG_CRC8=m ++# CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set ++# CONFIG_RANDOM32_SELFTEST is not set ++CONFIG_ZLIB_INFLATE=y ++CONFIG_ZLIB_DEFLATE=y ++CONFIG_LZO_COMPRESS=y ++CONFIG_LZO_DECOMPRESS=y ++CONFIG_LZ4_COMPRESS=m ++CONFIG_LZ4HC_COMPRESS=m ++CONFIG_LZ4_DECOMPRESS=y ++CONFIG_XZ_DEC=y ++CONFIG_XZ_DEC_X86=y ++CONFIG_XZ_DEC_POWERPC=y ++CONFIG_XZ_DEC_IA64=y ++CONFIG_XZ_DEC_ARM=y ++CONFIG_XZ_DEC_ARMTHUMB=y ++CONFIG_XZ_DEC_SPARC=y ++CONFIG_XZ_DEC_BCJ=y ++CONFIG_XZ_DEC_TEST=m ++CONFIG_DECOMPRESS_GZIP=y ++CONFIG_DECOMPRESS_BZIP2=y ++CONFIG_DECOMPRESS_LZMA=y ++CONFIG_DECOMPRESS_XZ=y ++CONFIG_DECOMPRESS_LZO=y ++CONFIG_DECOMPRESS_LZ4=y ++CONFIG_GENERIC_ALLOCATOR=y ++CONFIG_REED_SOLOMON=y ++CONFIG_REED_SOLOMON_ENC8=y ++CONFIG_REED_SOLOMON_DEC8=y ++CONFIG_REED_SOLOMON_DEC16=y ++CONFIG_BCH=m ++CONFIG_BCH_CONST_PARAMS=y ++CONFIG_TEXTSEARCH=y ++CONFIG_TEXTSEARCH_KMP=m ++CONFIG_TEXTSEARCH_BM=m ++CONFIG_TEXTSEARCH_FSM=m ++CONFIG_BTREE=y ++CONFIG_INTERVAL_TREE=y ++CONFIG_ASSOCIATIVE_ARRAY=y ++CONFIG_HAS_IOMEM=y ++CONFIG_HAS_IOPORT_MAP=y ++CONFIG_HAS_DMA=y ++CONFIG_CHECK_SIGNATURE=y ++CONFIG_CPU_RMAP=y ++CONFIG_DQL=y ++CONFIG_GLOB=y ++# CONFIG_GLOB_SELFTEST is not set ++CONFIG_NLATTR=y ++CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y ++CONFIG_LRU_CACHE=m ++CONFIG_AVERAGE=y ++CONFIG_CLZ_TAB=y ++CONFIG_CORDIC=m ++CONFIG_DDR=y ++CONFIG_MPILIB=y ++CONFIG_OID_REGISTRY=y ++CONFIG_UCS2_STRING=y ++CONFIG_FONT_SUPPORT=y ++# CONFIG_FONTS is not set ++CONFIG_FONT_8x8=y ++CONFIG_FONT_8x16=y ++CONFIG_ARCH_HAS_SG_CHAIN=y +diff -Nru linux-3.18.25.orig/security/dsb/dsb.c linux-3.18.25/security/dsb/dsb.c +--- linux-3.18.25.orig/security/dsb/dsb.c 1970-01-01 02:00:00.000000000 +0200 ++++ linux-3.18.25/security/dsb/dsb.c 2016-05-24 03:28:06.000000000 +0300 +@@ -0,0 +1,1454 @@ ++/* ++ * Linux Security ++ * DSB - yet another security model developed for Confident llc. ++ * ++ * Copyright (C) 2015, 2016 Alexander Vdolainen ++ * Copyright (C) 2015, 2016 Confident, llc ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * Due to this file being licensed under the GPL there is controversy over ++ * whether this permits you to write a module that #includes this file ++ * without placing your module under the GPL. Please consult a lawyer for ++ * advice before doing this. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include /* for local_port_range[] */ ++#include ++#include /* struct or_callable used in sock_rcv_skb */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include /* for network interface checks */ ++#include ++#include ++#include ++#include ++#include ++#include /* for Unix socket types */ ++#include /* for Unix socket types */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifdef CONFIG_SECURITY_DSB ++ ++#define DSBMAXRULES 32 /* max amount of rules */ ++#define __MXRLE DSBMAXRULES ++ ++/* capabilities */ ++#define DSBCAP_UREAD (1 << 1) ++#define DSBCAP_UWRITE (1 << 2) ++#define DSBCAP_UEXEC (1 << 3) ++#define DSBCAP_GREAD (1 << 4) ++#define DSBCAP_GWRITE (1 << 5) ++#define DSBCAP_GEXEC (1 << 6) ++#define DSBCAP_OREAD (1 << 7) ++#define DSBCAP_OWRITE (1 << 8) ++#define DSBCAP_OEXEC (1 << 9) ++#define DSBCAP_SDEL (1 << 10) ++#define DSBCAP_AUDIT (1 << 11) ++#define DSBCAP_SUPER (1 << 12) ++ ++#define DSB_REG_FILE 0xa ++#define DSB_DIRECTORY 0x4 ++ ++#define DSB_ACT_CREATENODESPECIAL 0x0 ++#define DSB_ACT_CREATEREGFILE 0x1 ++#define DSB_ACT_CREATEDIRECTORY 0x2 ++#define DSB_ACT_RMDIRECTORY 0x3 ++#define DSB_ACT_UNLINK 0x5 ++ ++#define DSBACT_READ 1 ++#define DSBACT_WRITE 2 ++#define DSBACT_EXEC 3 ++ ++#define DSBMASK_READ (1 << DSBACT_READ) ++#define DSBMASK_WRITE (1 << DSBACT_WRITE) ++#define DSBMASK_EXEC (1 << DSBACT_EXEC) ++#define DSBMASK_SET (1 << 4) ++ ++#define DSBRID_UID 1 ++#define DSBRID_GID 2 ++#define DSBRID_OTHER 0 /* must be always zero */ ++#define DSBRID_MAX 2 ++ ++#define DSBNL_UIDRULE DSBRID_UID ++#define DSBNL_GIDRULE DSBRID_GID ++#define DSBNL_OTHERRULE DSBRID_OTHER ++ ++/* special list entry */ ++struct dsb_sentry { ++ union { ++ uid_t uid; ++ gid_t gid; ++ }; ++ u8 mask; ++}; ++ ++/* object entry */ ++struct dsb_objsecurity { ++ struct rb_node node; ++ u64 hash; ++ struct dsb_sentry uidlist[__MXRLE]; ++ struct dsb_sentry gidlist[__MXRLE]; ++ u8 others; ++ u32 flags; ++}; ++ ++/* user capability */ ++struct dsb_usercaps { ++ struct rb_node node; ++ uid_t uid; ++ u8 caps; ++}; ++ ++#define DSBT_NEW 0 ++#define DSBT_IGNORE 1 ++#define DSBT_CHECK 2 ++ ++struct dsb_isecurity { ++ u64 hash; ++ u16 state; ++}; ++ ++#define NETLINK_DSBPOLICY 28 /* Policy setup for dsb security */ ++#define NETLINK_DSBEVENTS 29 /* Event notifications from dsb security */ ++ ++#define DSBNL_CMDADDOBJ 0xf ++#define DSBNL_CMDREMOVEOBJ 0xc ++#define DSBNL_CMDSETLISTENTRY 0xa ++#define DSBNL_CMDCLEANLISTENTRY 0xb ++#define DSBNL_CMDUIDCAPADD 0x5 ++#define DSBNL_CMDUIDCAPREMOVE 0x7 ++#define DSBNL_CMDUIDCAPCHANGE 0x8 ++ ++struct dsbnl_policy_msg { ++ u64 hash; ++ u32 flags; ++ u32 uid; ++ u32 gid; ++ u32 cap; ++ u8 listno; ++ u8 cmd; ++}; ++ ++static struct kmem_cache *dsb_inode_cache; ++static struct kmem_cache *dsb_sentry_cache; ++static struct kmem_cache *dsb_uidcap_cache; ++static struct sock *inpolicy = NULL; ++static struct sock *outaudit = NULL; ++static struct rw_semaphore *objrwlock = NULL; ++static struct rw_semaphore *usercapslock = NULL; ++static struct rb_root objstore = RB_ROOT; ++static struct rb_root uidstore = RB_ROOT; ++static pid_t dsbusd = 0; ++ ++/* events notify */ ++static void event_msgsend(const char *msg) ++{ ++ size_t msglen = strlen(msg); ++ struct sk_buff *skb_out; ++ struct nlmsghdr *nlh; ++ ++ skb_out = nlmsg_new(msglen, 0); ++ if(!skb_out) return; ++ ++ nlh = nlmsg_put(skb_out, 0, 0, NLMSG_DONE, msglen, 0); ++ ++ NETLINK_CB(skb_out).dst_group = 0; /* not in mcast group */ ++ strncpy(nlmsg_data(nlh), msg, msglen); ++ ++ nlmsg_unicast(outaudit, skb_out, dsbusd); ++ return; ++} ++ ++/* rbtree custom functions */ ++static struct dsb_usercaps *lookup_uidcap(struct rb_root *root, uid_t uid) ++{ ++ struct rb_node *node = root->rb_node; ++ ++ down_read(usercapslock); ++ while(node) { ++ struct dsb_usercaps *data = container_of(node, struct dsb_usercaps, node); ++ s64 diff; ++ ++ diff = (s64)uid - (s64)data->uid; ++ if(diff < 0) ++ node = node->rb_left; ++ else if(diff > 0) node = node->rb_right; ++ else { ++ up_read(usercapslock); ++ return data; ++ } ++ } ++ ++ up_read(usercapslock); ++ ++ return NULL; ++} ++ ++static int insert_uidcap(struct rb_root *root, struct dsb_usercaps *data) ++{ ++ struct rb_node **new = &(root->rb_node), *parent = NULL; ++ ++ down_write(usercapslock); ++ while (*new) { ++ struct dsb_usercaps *this = container_of(*new, struct dsb_usercaps, node); ++ s64 diff = (s64)this->uid - (s64)data->uid; ++ ++ parent = *new; ++ if (diff < 0) ++ new = &((*new)->rb_left); ++ else if (diff > 0) ++ new = &((*new)->rb_right); ++ else { ++ up_write(usercapslock); ++ return -1; ++ } ++ } ++ ++ /* Add new node and rebalance tree. */ ++ rb_link_node(&data->node, parent, new); ++ rb_insert_color(&data->node, root); ++ up_write(usercapslock); ++ ++ return 0; ++} ++ ++static int delete_uidcap(struct rb_root *root, uid_t uid) ++{ ++ struct dsb_usercaps *data = lookup_uidcap(root, uid); ++ ++ if(!data) return -1; ++ else { ++ down_write(usercapslock); ++ rb_erase(&data->node, root); ++ kmem_cache_free(dsb_uidcap_cache, data); ++ up_write(usercapslock); ++ } ++ ++ return 0; ++} ++ ++static struct dsb_objsecurity *lookup_secobject(struct rb_root *root, u64 hash) ++{ ++ struct rb_node *node = root->rb_node; ++ ++ down_read(objrwlock); ++ while(node) { ++ struct dsb_objsecurity *data = container_of(node, struct dsb_objsecurity, node); ++ s64 diff; ++ ++ diff = (s64)hash - (s64)data->hash; ++ if(diff < 0) ++ node = node->rb_left; ++ else if(diff > 0) node = node->rb_right; ++ else { ++ up_read(objrwlock); ++ return data; ++ } ++ } ++ ++ up_read(objrwlock); ++ ++ return NULL; ++} ++ ++static int insert_secobject(struct rb_root *root, struct dsb_objsecurity *data) ++{ ++ struct rb_node **new = &(root->rb_node), *parent = NULL; ++ ++ down_write(objrwlock); ++ while (*new) { ++ struct dsb_objsecurity *this = container_of(*new, struct dsb_objsecurity, node); ++ s64 diff = (s64)this->hash - (s64)data->hash; ++ ++ parent = *new; ++ if (diff < 0) ++ new = &((*new)->rb_left); ++ else if (diff > 0) ++ new = &((*new)->rb_right); ++ else { ++ up_write(objrwlock); ++ return -1; ++ } ++ } ++ ++ /* Add new node and rebalance tree. */ ++ rb_link_node(&data->node, parent, new); ++ rb_insert_color(&data->node, root); ++ up_write(objrwlock); ++ ++ return 0; ++} ++ ++static int delete_secobject(struct rb_root *root, u64 hash) ++{ ++ struct dsb_objsecurity *data = lookup_secobject(root, hash); ++ ++ if(!data) return -1; ++ else { ++ down_write(objrwlock); ++ rb_erase(&data->node, root); ++ kmem_cache_free(dsb_sentry_cache, data); ++ up_write(objrwlock); ++ } ++ ++ return 0; ++} ++ ++static int setrule_secobject(struct rb_root *root, u64 hash, u8 rid, u8 n, ++ u8 mask, u8 clr, u32 id) ++{ ++ struct dsb_objsecurity *data; ++ ++ /* check for valid values */ ++ if(rid < 0 || rid > DSBRID_MAX) return -1; ++ if(rid && n >= __MXRLE) return -1; ++ if(n < 0) return -1; ++ ++ if(!(data = lookup_secobject(root, hash))) return -1; ++ ++ /* modify object */ ++ down_write(objrwlock); ++ if(clr) { ++ switch(rid) { ++ case DSBRID_OTHER: data->others = 0; break; ++ case DSBRID_UID: memset(&data->uidlist[n], 0, sizeof(struct dsb_sentry)); break; ++ case DSBRID_GID: memset(&data->gidlist[n], 0, sizeof(struct dsb_sentry)); break; ++ } ++ } else { ++ mask |= DSBMASK_SET; ++ switch(rid) { ++ case DSBRID_OTHER: data->others = mask; break; ++ case DSBRID_UID: data->uidlist[n].uid = id; data->uidlist[n].mask = mask; break; ++ case DSBRID_GID: data->gidlist[n].gid = id; data->gidlist[n].mask = mask; break; ++ } ++ } ++ up_write(objrwlock); ++ ++ return 0; ++} ++ ++static u8 getrule_secobject(struct rb_root *root, u64 hash, u8 rid, u8 n, ++ u32 id, u8 *sp) ++{ ++ struct dsb_objsecurity *data; ++ struct dsb_sentry *list = NULL; ++ u8 nf = 0, i; /* by default we will return not set mask */ ++ ++ /* check for valid values */ ++ if(rid < 0 || rid > DSBRID_MAX) goto __fexit; ++ if(rid && n >= __MXRLE) goto __fexit; ++ if(n < 0) goto __fexit; ++ ++ if(!(data = lookup_secobject(root, hash))) { ++ __fexit: ++ if(sp) *sp = __MXRLE; ++ return 0; ++ } ++ ++ down_read(objrwlock); ++ ++ switch(rid) { ++ case DSBRID_OTHER: nf = data->others; goto __sexit; break; /* we don't care here anymore */ ++ case DSBRID_UID: list = data->uidlist; break; ++ case DSBRID_GID: list = data->gidlist; break; ++ } ++ ++ if(!list) goto __sexit; /* paranoic test */ ++ ++ for(i = n; i < __MXRLE; i++) { ++ if((list[i].mask & DSBMASK_SET) && list[i].uid == id) { ++ nf = list[i].mask; ++ *sp = i + 1; ++ goto __sexit; ++ } ++ } ++ ++ /* not found */ ++ *sp = __MXRLE; ++ ++ __sexit: ++ up_read(objrwlock); ++ ++ return nf; ++} ++ ++#define getuidrule_secobject(root, hash, n, uid, sp) getrule_secobject(root, hash, 1, n, uid, (sp)) ++#define getgidrule_secobject(root, hash, n, gid, sp) getrule_secobject(root, hash, 2, n, gid, (sp)) ++#define getotherrule_secobject(root, hash) getrule_secobject(root, hash, 0, 0, 0, NULL) ++ ++static int doaction(struct rb_root *root, u64 hash, u8 action, ++ uid_t uid, gid_t gid) ++{ ++ u8 mask = 0; ++ u8 sp = 0; ++ int e = 0; ++ ++ /* get the uid rule, the first -EACCES is enough to cancel action*/ ++ while(sp != __MXRLE) { ++ mask = getuidrule_secobject(root, hash, sp, uid, &sp); ++ if(mask & DSBMASK_SET) { ++ if(!(mask & (1 << action))) return -EACCES; ++ else e++; ++ } ++ } ++ ++ if(e) return 0; /* one of the rule allow to do the action */ ++ ++ /* looks like we passed uid test */ ++ sp = 0; ++ while(sp != __MXRLE) { ++ mask = getgidrule_secobject(root, hash, sp, gid, &sp); ++ if(mask & DSBMASK_SET) { ++ if(!(mask & (1 << action))) return -EACCES; ++ else e++; ++ } ++ } ++ ++ if(e) return 0; /* gid rule allows */ ++ ++ /* ok, all is possible i.e. we don't find any kind of ++ * restricting rules, check out rule for others ++ */ ++ ++ mask = getotherrule_secobject(root, hash); ++ if((mask & DSBMASK_SET) && !(mask & (1 << action))) return -EACCES; /* oops */ ++ ++ return 0; /* all is fine */ ++} ++ ++static char *uuid2str(u8 uuid[16]) ++{ ++ char *str = kmalloc(sizeof(char)*64, GFP_KERNEL); ++ int i; ++ ++ if(!str) return NULL; ++ else memset(str, 0, sizeof(char)*64); ++ ++ for(i = 0; i < 16; i++) ++ snprintf(str + (2*i*sizeof(char)), 33, "%02x", uuid[i]); ++ ++ return str; ++} ++ ++static void free_uuidstr(char *str) ++{ ++ kfree(str); ++} ++ ++static u64 djb2_hash(unsigned char *str) ++{ ++ u64 hash = 5381; ++ int c; ++ ++ while ((c = *str++)) ++ hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ ++ ++ return hash; ++} ++ ++static int _checkaction(struct rb_root *root, u64 hash, int action) ++{ ++ kuid_t uid = current_fsuid(); ++ kgid_t gid = current_fsgid(); ++ struct dsb_usercaps *ucap = lookup_uidcap(&uidstore, uid.val); ++ ++ /* check user capability mask if exists */ ++ if(ucap) { ++ if(!(ucap->caps << action)) return -EACCES; ++ } ++ ++ switch(action) { ++ case DSB_ACT_CREATENODESPECIAL: ++ case DSB_ACT_CREATEREGFILE: ++ case DSB_ACT_CREATEDIRECTORY: ++ case DSB_ACT_RMDIRECTORY: ++ case DSB_ACT_UNLINK: ++ /* this action all required write access to the underlying object */ ++ return doaction(root, hash, DSBACT_WRITE, uid.val, gid.val); ++ break; ++ } ++ ++ return 0; ++} ++ ++static int _oninodedir(struct inode *dir, struct dentry *dentry, int action) ++{ ++ struct super_block *sb = dir->i_sb; ++ struct dsb_isecurity *isec = dir->i_security; ++ char tmpr[70]; ++ char *uuid = NULL; ++ int r = 0; ++ ++ if(!isec) return 0; ++ ++ switch(isec->state) { ++ case DSBT_NEW: ++ uuid = uuid2str(sb->s_uuid); ++ if(!uuid) return 0; /* allow it, because we don't know about this object yet */ ++ /* here we already know - this is a real volume */ ++ memset(tmpr, 0, 70); ++ snprintf(tmpr, 70, "%s-%lu", uuid, dir->i_ino); ++ isec->hash = djb2_hash((unsigned char *)tmpr); ++ isec->state = DSBT_CHECK; ++ //printk(KERN_INFO "(_oninodedir) assigned hash=%lu for inode %lu\n", isec->hash, dir->i_ino); ++ free_uuidstr(uuid); ++ break; ++ case DSBT_CHECK: goto __checkup; break; ++ case DSBT_IGNORE: ++ default: return 0; break; ++ } ++ ++ __checkup: ++ r = _checkaction(&objstore, isec->hash, action); ++ ++ return r; ++} ++ ++/** ++ * ++ * @inode_alloc_security: ++ * Allocate and attach a security structure to @inode->i_security. The ++ * i_security field is initialized to NULL when the inode structure is ++ * allocated. ++ * @inode contains the inode structure. ++ * Return 0 if operation was successful. ++ */ ++int dsb_inode_alloc_security (struct inode *inode) ++{ ++ struct super_block *sb = inode->i_sb; ++ struct dsb_isecurity *isec = kmem_cache_zalloc(dsb_inode_cache, GFP_NOFS); ++ u8 zuuid[16]; ++ char tmpr[70]; ++ char *uuid = uuid2str(sb->s_uuid); ++ ++ if(!uuid) return -ENOMEM; ++ if(!isec) return -ENOMEM; ++ ++ memset(zuuid, 0, sizeof(u8)*16); ++ ++ inode->i_security = isec; ++ ++ /* check it and set */ ++ if(!memcmp(zuuid, sb->s_uuid, sizeof(u8)*16)) ++ isec->state = DSBT_IGNORE; ++ else { ++ if(inode->i_ino == 0) isec->state = DSBT_NEW; ++ else isec->state = DSBT_CHECK; ++ } ++ ++ if(isec->state == DSBT_CHECK) { /* now we can compute and save hash */ ++ memset(tmpr, 0, 70); ++ snprintf(tmpr, 70, "%s-%lu", uuid, inode->i_ino); ++ isec->hash = djb2_hash((unsigned char *)tmpr); ++ //printk(KERN_INFO "assigned hash=%lu for inode %lu\n", isec->hash, inode->i_ino); ++ } ++ ++ free_uuidstr(uuid); ++ ++ return 0; ++} ++ ++/** ++ * ++ * @inode_free_security: ++ * @inode contains the inode structure. ++ * Deallocate the inode security structure and set @inode->i_security to ++ * NULL. ++ */ ++/* TODO: strictly test it up */ ++void dsb_inode_free_security (struct inode *inode) ++{ ++ #if 0 ++ struct dsb_isecurity *isec = inode->i_security; ++ ++ if(isec) { ++ kmem_cache_free(dsb_inode_cache, isec); ++ inode->i_security = NULL; ++ } ++ #endif ++ ++ return; ++} ++ ++/** ++ * ++ * @inode_init_security: ++ * Obtain the security attribute name suffix and value to set on a newly ++ * created inode and set up the incore security field for the new inode. ++ * This hook is called by the fs code as part of the inode creation ++ * transaction and provides for atomic labeling of the inode, unlike ++ * the post_create/mkdir/... hooks called by the VFS. The hook function ++ * is expected to allocate the name and value via kmalloc, with the caller ++ * being responsible for calling kfree after using them. ++ * If the security module does not use security attributes or does ++ * not wish to put a security attribute on this particular inode, ++ * then it should return -EOPNOTSUPP to skip this processing. ++ * @inode contains the inode structure of the newly created inode. ++ * @dir contains the inode structure of the parent directory. ++ * @qstr contains the last path component of the new object ++ * @name will be set to the allocated name suffix (e.g. selinux). ++ * @value will be set to the allocated attribute value. ++ * @len will be set to the length of the value. ++ * Returns 0 if @name and @value have been successfully set, ++ * -EOPNOTSUPP if no security attribute is needed, or ++ * -ENOMEM on memory allocation failure. ++ */ ++int dsb_inode_init_security (struct inode *inode, struct inode *dir, ++ const struct qstr *qstr, const char **name, ++ void **value, size_t *len) ++{ ++ return -EOPNOTSUPP; ++} ++ ++/** ++ * ++ * @inode_create: ++ * Check permission to create a regular file. ++ * @dir contains inode structure of the parent of the new file. ++ * @dentry contains the dentry structure for the file to be created. ++ * @mode contains the file mode of the file to be created. ++ * Return 0 if permission is granted. ++ */ ++int dsb_inode_create(struct inode *dir, ++ struct dentry *dentry, umode_t mode) ++{ ++ return _oninodedir(dir, dentry, DSB_ACT_CREATEREGFILE); ++} ++ ++/** ++ * ++ * @inode_link: ++ * Check permission before creating a new hard link to a file. ++ * @old_dentry contains the dentry structure for an existing link to the file. ++ * @dir contains the inode structure of the parent directory of the new link. ++ * @new_dentry contains the dentry structure for the new link. ++ * Return 0 if permission is granted. ++ */ ++int dsb_inode_link (struct dentry *old_dentry, ++ struct inode *dir, struct dentry *new_dentry) ++{ ++ return _oninodedir(dir, new_dentry, DSB_ACT_CREATEREGFILE); ++} ++ ++/** ++ * ++ * @inode_unlink: ++ * Check the permission to remove a hard link to a file. ++ * @dir contains the inode structure of parent directory of the file. ++ * @dentry contains the dentry structure for file to be unlinked. ++ * Return 0 if permission is granted. ++ */ ++int dsb_inode_unlink (struct inode *dir, struct dentry *dentry) ++{ ++ return _oninodedir(dir, dentry, DSB_ACT_UNLINK); ++} ++ ++/** ++ * ++ * @inode_mkdir: ++ * Check permissions to create a new directory in the existing directory ++ * associated with inode structure @dir. ++ * @dir contains the inode structure of parent of the directory to be created. ++ * @dentry contains the dentry structure of new directory. ++ * @mode contains the mode of new directory. ++ * Return 0 if permission is granted. ++ */ ++int dsb_inode_mkdir (struct inode *dir, struct dentry *dentry, umode_t mode) ++{ ++ return _oninodedir(dir, dentry, DSB_ACT_CREATEDIRECTORY); ++} ++ ++/** ++ * ++ * @inode_rmdir: ++ * Check the permission to remove a directory. ++ * @dir contains the inode structure of parent of the directory to be removed. ++ * @dentry contains the dentry structure of directory to be removed. ++ * Return 0 if permission is granted. ++ */ ++int dsb_inode_rmdir (struct inode *dir, struct dentry *dentry) ++{ ++ return _oninodedir(dir, dentry, DSB_ACT_RMDIRECTORY); ++} ++ ++/** ++ * ++ * @inode_mknod: ++ * Check permissions when creating a special file (or a socket or a fifo ++ * file created via the mknod system call). Note that if mknod operation ++ * is being done for a regular file, then the create hook will be called ++ * and not this hook. ++ * @dir contains the inode structure of parent of the new file. ++ * @dentry contains the dentry structure of the new file. ++ * @mode contains the mode of the new file. ++ * @dev contains the device number. ++ * Return 0 if permission is granted. ++ */ ++int dsb_inode_mknod (struct inode *dir, struct dentry *dentry, ++ umode_t mode, dev_t dev) ++{ ++ return _oninodedir(dir, dentry, DSB_ACT_CREATENODESPECIAL); ++} ++ ++/** ++ * ++ * @inode_rename: ++ * Check for permission to rename a file or directory. ++ * @old_dir contains the inode structure for parent of the old link. ++ * @old_dentry contains the dentry structure of the old link. ++ * @new_dir contains the inode structure for parent of the new link. ++ * @new_dentry contains the dentry structure of the new link. ++ * Return 0 if permission is granted. ++ */ ++int dsb_inode_rename (struct inode *old_dir, struct dentry *old_dentry, ++ struct inode *new_dir, struct dentry *new_dentry) ++{ ++ int r = _oninodedir(old_dir, old_dentry, DSB_ACT_UNLINK); ++ ++ if(!r) return _oninodedir(new_dir, new_dentry, DSB_ACT_CREATEREGFILE); ++ else return -EACCES; ++} ++ ++/** ++ * ++ * @inode_permission: ++ * Check permission before accessing an inode. This hook is called by the ++ * existing Linux permission function, so a security module can use it to ++ * provide additional checking for existing Linux permission checks. ++ * Notice that this hook is called when a file is opened (as well as many ++ * other operations), whereas the file_security_ops permission hook is ++ * called when the actual read/write operations are performed. ++ * @inode contains the inode structure to check. ++ * @mask contains the permission mask. ++ * Return 0 if permission is granted. ++ */ ++int dsb_inode_permission(struct inode *inode, int mask) ++{ ++ return 0; ++} ++ ++/** ++ * ++ * @inode_setattr: ++ * Check permission before setting file attributes. Note that the kernel ++ * call to notify_change is performed from several locations, whenever ++ * file attributes change (such as when a file is truncated, chown/chmod ++ * operations, transferring disk quotas, etc). ++ * @dentry contains the dentry structure for the file. ++ * @attr is the iattr structure containing the new file attributes. ++ * Return 0 if permission is granted. ++ */ ++int dsb_inode_setattr(struct dentry *dentry, struct iattr *attr) ++{ ++ struct inode *inode = dentry->d_inode; ++ struct super_block *sb = inode->i_sb; ++ struct dsb_isecurity *isec = inode->i_security; ++ char tmpr[70]; ++ char *uuid = NULL; ++ kuid_t uid = current_fsuid(); ++ kgid_t gid = current_fsgid(); ++ ++ if(!isec) return 0; ++ ++ switch(isec->state) { ++ case DSBT_NEW: ++ uuid = uuid2str(sb->s_uuid); ++ if(!uuid) return 0; /* allow it, because we don't know about this object yet */ ++ /* here we already know - this is a real volume */ ++ memset(tmpr, 0, 70); ++ snprintf(tmpr, 70, "%s-%lu", uuid, inode->i_ino); ++ isec->hash = djb2_hash((unsigned char *)tmpr); ++ isec->state = DSBT_CHECK; ++ //printk(KERN_INFO "(_pathunlink) assigned hash=%lu for inode %lu\n", isec->hash, inode->i_ino); ++ free_uuidstr(uuid); ++ break; ++ case DSBT_CHECK: goto __checkup; break; ++ case DSBT_IGNORE: ++ default: return 0; break; ++ } ++ ++ __checkup: ++ return doaction(&objstore, isec->hash, DSBACT_WRITE, uid.val, gid.val); ++} ++ ++#ifdef CONFIG_SECURITY_PATH ++ ++/** ++ * ++ * @path_unlink: ++ * Check the permission to remove a hard link to a file. ++ * @dir contains the path structure of parent directory of the file. ++ * @dentry contains the dentry structure for file to be unlinked. ++ * Return 0 if permission is granted. ++ */ ++int dsb_path_unlink(struct path *dir, struct dentry *dentry) ++{ ++ struct inode *inode = dentry->d_inode; ++ struct super_block *sb = inode->i_sb; ++ struct dsb_isecurity *isec = inode->i_security; ++ struct dsb_objsecurity *data = NULL; ++ char tmpr[70]; ++ char *uuid = NULL; ++ int i; ++ kuid_t uid = current_fsuid(); ++ kgid_t gid = current_fsgid(); ++ ++ if(!isec) return 0; ++ ++ switch(isec->state) { ++ case DSBT_NEW: ++ uuid = uuid2str(sb->s_uuid); ++ if(!uuid) return 0; /* allow it, because we don't know about this object yet */ ++ /* here we already know - this is a real volume */ ++ memset(tmpr, 0, 70); ++ snprintf(tmpr, 70, "%s-%lu", uuid, inode->i_ino); ++ isec->hash = djb2_hash((unsigned char *)tmpr); ++ isec->state = DSBT_CHECK; ++ //printk(KERN_INFO "(_pathunlink) assigned hash=%lu for inode %lu\n", isec->hash, inode->i_ino); ++ free_uuidstr(uuid); ++ break; ++ case DSBT_CHECK: goto __checkup; break; ++ case DSBT_IGNORE: ++ default: return 0; break; ++ } ++ ++ __checkup: ++ i = doaction(&objstore, isec->hash, DSBACT_WRITE, uid.val, gid.val); ++ ++ if(i) return i; ++ ++ if(inode->i_nlink < 2) { ++ data = lookup_secobject(&objstore, isec->hash); ++ if(data) { /* remove security object and audit an event about that */ ++ down_write(objrwlock); ++ rb_erase(&data->node, &objstore); ++ kmem_cache_free(dsb_sentry_cache, data); ++ up_write(objrwlock); ++ /* send an event ! */ ++ snprintf(tmpr, 70, "(rm-object :unlk %llu)", isec->hash); ++ event_msgsend(tmpr); ++ } ++ } ++ ++ return 0; ++} ++ ++/** ++ * ++ * @path_mkdir: ++ * Check permissions to create a new directory in the existing directory ++ * associated with path structure @path. ++ * @dir contains the path structure of parent of the directory ++ * to be created. ++ * @dentry contains the dentry structure of new directory. ++ * @mode contains the mode of new directory. ++ * Return 0 if permission is granted. ++ */ ++int dsb_path_mkdir(struct path *dir, struct dentry *dentry, umode_t mode) ++{ ++ kuid_t uid = current_fsuid(); ++ kgid_t gid = current_fsgid(); ++ struct super_block *sb = NULL; ++ struct dsb_isecurity *isec = NULL; ++ struct inode *inode; ++ char tmpr[70]; ++ char *uuid = NULL; ++ struct dsb_usercaps *ucap = lookup_uidcap(&uidstore, uid.val); ++ ++ /* check for capability of the given user */ ++ if(ucap) { ++ if(!(ucap->caps << DSB_ACT_CREATEDIRECTORY)) return -EACCES; ++ } ++ ++ /* check for the parent write access ++ * ok, that's simple : ++ * 1. get an inode of the parent ++ * 2. check if we are able to write there ++ */ ++ inode = dir->dentry->d_inode; /* this is the one */ ++ if(!inode) return 0; /* paranoic test */ ++ ++ sb = inode->i_sb; ++ isec = inode->i_security; ++ if(!isec) return 0; ++ ++ switch(isec->state) { ++ case DSBT_NEW: ++ uuid = uuid2str(sb->s_uuid); ++ if(!uuid) return 0; /* allow it, because we don't know about this object yet */ ++ /* here we already know - this is a real volume */ ++ memset(tmpr, 0, 70); ++ snprintf(tmpr, 70, "%s-%lu", uuid, inode->i_ino); ++ isec->hash = djb2_hash((unsigned char *)tmpr); ++ isec->state = DSBT_CHECK; ++ //printk(KERN_INFO "(_pathmkdir) assigned hash=%lu for inode %lu\n", isec->hash, inode->i_ino); ++ free_uuidstr(uuid); ++ break; ++ case DSBT_CHECK: goto __checkup; break; ++ case DSBT_IGNORE: ++ default: return 0; break; ++ } ++ ++ __checkup: ++ return doaction(&objstore, isec->hash, DSBACT_WRITE, uid.val, gid.val); ++} ++ ++/** ++ * ++ * @path_rmdir: ++ * Check the permission to remove a directory. ++ * @dir contains the path structure of parent of the directory to be ++ * removed. ++ * @dentry contains the dentry structure of directory to be removed. ++ * Return 0 if permission is granted. ++ */ ++int dsb_path_rmdir(struct path *dir, struct dentry *dentry) ++{ ++ struct inode *inode = dentry->d_inode; ++ struct super_block *sb = inode->i_sb; ++ struct dsb_isecurity *isec = inode->i_security; ++ struct dsb_objsecurity *data = NULL; ++ char tmpr[70]; ++ char *uuid = NULL; ++ int i; ++ kuid_t uid = current_fsuid(); ++ kgid_t gid = current_fsgid(); ++ ++ if(!isec) return 0; ++ ++ switch(isec->state) { ++ case DSBT_NEW: ++ uuid = uuid2str(sb->s_uuid); ++ if(!uuid) return 0; /* allow it, because we don't know about this object yet */ ++ /* here we already know - this is a real volume */ ++ memset(tmpr, 0, 70); ++ snprintf(tmpr, 70, "%s-%lu", uuid, inode->i_ino); ++ isec->hash = djb2_hash((unsigned char *)tmpr); ++ isec->state = DSBT_CHECK; ++ //printk(KERN_INFO "(_pathrmdir) assigned hash=%lu for inode %lu\n", isec->hash, inode->i_ino); ++ free_uuidstr(uuid); ++ break; ++ case DSBT_CHECK: goto __checkup; break; ++ case DSBT_IGNORE: ++ default: return 0; break; ++ } ++ ++ __checkup: ++ i = doaction(&objstore, isec->hash, DSBACT_WRITE, uid.val, gid.val); ++ ++ if(i) return i; ++ ++ if(inode->i_nlink < 2) { ++ data = lookup_secobject(&objstore, isec->hash); ++ if(data) { ++ /* remove security object and audit an event about that */ ++ down_write(objrwlock); ++ rb_erase(&data->node, &objstore); ++ kmem_cache_free(dsb_sentry_cache, data); ++ up_write(objrwlock); ++ /* send an event ! */ ++ snprintf(tmpr, 70, "(rm-object :rmdir %llu)", isec->hash); ++ event_msgsend(tmpr); ++ } ++ } ++ ++ return 0; ++} ++ ++/** ++ * ++ * @path_mknod: ++ * Check permissions when creating a file. Note that this hook is called ++ * even if mknod operation is being done for a regular file. ++ * @dir contains the path structure of parent of the new file. ++ * @dentry contains the dentry structure of the new file. ++ * @mode contains the mode of the new file. ++ * @dev contains the undecoded device number. Use new_decode_dev() to get ++ * the decoded device number. ++ * Return 0 if permission is granted. ++ */ ++int dsb_path_mknod(struct path *dir, struct dentry *dentry, umode_t mode, ++ unsigned int dev) ++{ ++ return 0; ++} ++ ++/** ++ * ++ * @path_link: ++ * Check permission before creating a new hard link to a file. ++ * @old_dentry contains the dentry structure for an existing link ++ * to the file. ++ * @new_dir contains the path structure of the parent directory of ++ * the new link. ++ * @new_dentry contains the dentry structure for the new link. ++ * Return 0 if permission is granted. ++ */ ++int dsb_path_link(struct dentry *old_dentry, struct path *new_dir, ++ struct dentry *new_dentry) ++{ ++ return 0; ++} ++ ++/** ++ * ++ * @path_rename: ++ * Check for permission to rename a file or directory. ++ * @old_dir contains the path structure for parent of the old link. ++ * @old_dentry contains the dentry structure of the old link. ++ * @new_dir contains the path structure for parent of the new link. ++ * @new_dentry contains the dentry structure of the new link. ++ * Return 0 if permission is granted. ++ */ ++int dsb_path_rename(struct path *old_dir, struct dentry *old_dentry, ++ struct path *new_dir, struct dentry *new_dentry) ++{ ++ return 0; ++} ++ ++/** ++ * ++ * @path_chmod: ++ * Check for permission to change DAC's permission of a file or directory. ++ * @dentry contains the dentry structure. ++ * @mnt contains the vfsmnt structure. ++ * @mode contains DAC's mode. ++ * Return 0 if permission is granted. ++ */ ++int dsb_path_chmod(struct path *path, umode_t mode) ++{ ++ return 0; ++} ++ ++/** ++ * ++ * @path_chown: ++ * Check for permission to change owner/group of a file or directory. ++ * @path contains the path structure. ++ * @uid contains new owner's ID. ++ * @gid contains new group's ID. ++ * Return 0 if permission is granted. ++ */ ++int dsb_path_chown(struct path *path, kuid_t uid, kgid_t gid) ++{ ++ return 0; ++} ++ ++#endif ++ ++/** ++ * ++ * @file_permission: ++ * Check file permissions before accessing an open file. This hook is ++ * called by various operations that read or write files. A security ++ * module can use this hook to perform additional checking on these ++ * operations, e.g. to revalidate permissions on use to support privilege ++ * bracketing or policy changes. Notice that this hook is used when the ++ * actual read/write operations are performed, whereas the ++ * inode_security_ops hook is called when a file is opened (as well as ++ * many other operations). ++ * Caveat: Although this hook can be used to revalidate permissions for ++ * various system call operations that read or write files, it does not ++ * address the revalidation of permissions for memory-mapped files. ++ * Security modules must handle this separately if they need such ++ * revalidation. ++ * @file contains the file structure being accessed. ++ * @mask contains the requested permissions. ++ * Return 0 if permission is granted. ++ */ ++int dsb_file_permission(struct file *file, int mask) ++{ ++ return 0; ++} ++ ++/** ++ * ++ * @file_alloc_security: ++ * Allocate and attach a security structure to the file->f_security field. ++ * The security field is initialized to NULL when the structure is first ++ * created. ++ * @file contains the file structure to secure. ++ * Return 0 if the hook is successful and permission is granted. ++ */ ++int dsb_file_alloc_security(struct file *file) ++{ ++ return 0; ++} ++ ++/** ++ * ++ * @file_free_security: ++ * Deallocate and free any security structures stored in file->f_security. ++ * @file contains the file structure being modified. ++ */ ++void dsb_file_free_security(struct file *file) ++{ ++ return; ++} ++ ++/** ++ * ++ * @file_mprotect: ++ * Check permissions before changing memory access permissions. ++ * @vma contains the memory region to modify. ++ * @reqprot contains the protection requested by the application. ++ * @prot contains the protection that will be applied by the kernel. ++ * Return 0 if permission is granted. ++ */ ++int dsb_file_mprotect(struct vm_area_struct *vma, ++ unsigned long reqprot, ++ unsigned long prot) ++{ ++ return 0; ++} ++ ++/** ++ * ++ * @file_set_fowner: ++ * Save owner security information (typically from current->security) in ++ * file->f_security for later use by the send_sigiotask hook. ++ * @file contains the file structure to update. ++ * Return 0 on success. ++ */ ++void dsb_file_set_fowner(struct file *file) ++{ ++ return; ++} ++ ++/** ++ * ++ * @file_open ++ * Save open-time permission checking state for later use upon ++ * file_permission, and recheck access if anything has changed ++ * since inode_permission. ++ */ ++static int dsb_file_open(struct file *file, const struct cred *cred) ++{ ++ struct inode *inode = file->f_inode; ++ struct super_block *sb = inode->i_sb; ++ struct dsb_isecurity *isec = inode->i_security; ++ char tmpr[70]; ++ char *uuid = NULL; ++ int r = 0; ++ kuid_t uid = cred->fsuid; ++ kgid_t gid = cred->fsgid; ++ ++ if(!isec) return 0; ++ ++ switch(isec->state) { ++ case DSBT_NEW: ++ uuid = uuid2str(sb->s_uuid); ++ if(!uuid) return 0; /* allow it, because we don't know about this object yet */ ++ /* here we already know - this is a real volume */ ++ memset(tmpr, 0, 70); ++ snprintf(tmpr, 70, "%s-%lu", uuid, inode->i_ino); ++ isec->hash = djb2_hash((unsigned char *)tmpr); ++ isec->state = DSBT_CHECK; ++ //printk(KERN_INFO "(_filpopen) assigned hash=%lu for inode %lu\n", isec->hash, inode->i_ino); ++ free_uuidstr(uuid); ++ break; ++ case DSBT_CHECK: goto __checkup; break; ++ case DSBT_IGNORE: ++ default: return 0; break; ++ } ++ ++ __checkup: ++ /* read permission */ ++ if(file->f_mode & FMODE_READ) r = doaction(&objstore, isec->hash, DSBACT_READ, uid.val, gid.val); ++ if(r) return r; ++ /* write permission */ ++ if(file->f_mode & FMODE_WRITE) r = doaction(&objstore, isec->hash, DSBACT_WRITE, uid.val, gid.val); ++ if(r) return r; ++ /* execute permission */ ++ if(file->f_mode & FMODE_EXEC) r = doaction(&objstore, isec->hash, DSBACT_EXEC, uid.val, gid.val); ++ ++ return r; ++} ++ ++ ++static struct security_operations dsb_ops = { ++ .name = "dsb", ++ /* inode ops */ ++ .inode_alloc_security = dsb_inode_alloc_security, ++ .inode_init_security = dsb_inode_init_security, ++ .inode_free_security = dsb_inode_free_security, ++ .inode_create = dsb_inode_create, ++ .inode_link = dsb_inode_link, ++ .inode_unlink = dsb_inode_unlink, ++ .inode_mkdir = dsb_inode_mkdir, ++ .inode_rmdir = dsb_inode_rmdir, ++ .inode_mknod = dsb_inode_mknod, ++ .inode_rename = dsb_inode_rename, ++ .inode_permission = dsb_inode_permission, ++ .inode_setattr = dsb_inode_setattr, ++ /* path */ ++#ifdef CONFIG_SECURITY_PATH ++ .path_unlink = dsb_path_unlink, ++ .path_link = dsb_path_link, ++ .path_mkdir = dsb_path_mkdir, ++ .path_rmdir = dsb_path_rmdir, ++ .path_mknod = dsb_path_mknod, ++ .path_chmod = dsb_path_chmod, ++ .path_chown = dsb_path_chown, ++ .path_rename = dsb_path_rename, ++#endif ++ /* file ops */ ++ .file_permission = dsb_file_permission, ++ .file_alloc_security = dsb_file_alloc_security, ++ .file_free_security = dsb_file_free_security, ++ .file_mprotect = dsb_file_mprotect, ++ .file_set_fowner = dsb_file_set_fowner, ++ .file_open = dsb_file_open, ++}; ++ ++static void policy_rec(struct sk_buff *skb) ++{ ++ struct nlmsghdr *nlh; ++ struct dsbnl_policy_msg *msg; ++ struct dsb_objsecurity *new; ++ struct dsb_usercaps *cnew; ++ int pid, len; ++ u8 mask = 0; ++ ++ nlh = nlmsg_hdr(skb); ++ len = skb->len; ++ printk(KERN_INFO "DSB: Netlink received msg\n"); ++ pid = nlh->nlmsg_pid; /* pid of sending process */ ++ if(!dsbusd) { ++ dsbusd = pid; ++ printk(KERN_INFO "DSB: regitering %d as a daemon.\n", dsbusd); ++ } else if(pid != dsbusd) { ++ printk(KERN_WARNING "DSB: Unallowed attempt to configure dsb.\n"); ++ return; /* no no no */ ++ } ++ ++ ++ msg = nlmsg_data(nlh); ++ /*if(nlh->nlmsg_flags & NLM_F_ACK) ++ netlink_ack(skb, nlh, 0);*/ ++ ++ /* do some magic */ ++ switch(msg->cmd) { ++ case DSBNL_CMDADDOBJ: ++ new = kmem_cache_zalloc(dsb_sentry_cache, GFP_NOFS); ++ if(!new) return; ++ ++ new->hash = msg->hash; ++ new->flags = msg->flags; ++ insert_secobject(&objstore, new); ++ printk(KERN_INFO "DSB: inserting \n"); ++ break; ++ case DSBNL_CMDREMOVEOBJ: ++ delete_secobject(&objstore, msg->hash); ++ break; ++ case DSBNL_CMDSETLISTENTRY: ++ /* convert msg->cap to mask */ ++ if(msg->cap & DSBMASK_READ) mask |= DSBMASK_READ; ++ if(msg->cap & DSBMASK_WRITE) mask |= DSBMASK_WRITE; ++ if(msg->cap & DSBMASK_EXEC) mask |= DSBMASK_EXEC; ++ switch(msg->flags) { ++ case DSBNL_UIDRULE: setrule_secobject(&objstore, msg->hash, DSBRID_UID, msg->listno, mask, 0, msg->uid); break; ++ case DSBNL_GIDRULE: setrule_secobject(&objstore, msg->hash, DSBRID_GID, msg->listno, mask, 0, msg->gid); break; ++ case DSBNL_OTHERRULE: setrule_secobject(&objstore, msg->hash, DSBRID_OTHER, 0, mask, 0, 0); break; ++ default: return; break; ++ } ++ break; ++ case DSBNL_CMDCLEANLISTENTRY: ++ switch(msg->flags) { ++ case DSBNL_UIDRULE: setrule_secobject(&objstore, msg->hash, DSBRID_UID, msg->listno, 0, 1, 0); break; ++ case DSBNL_GIDRULE: setrule_secobject(&objstore, msg->hash, DSBRID_GID, msg->listno, 0, 1, 0); break; ++ case DSBNL_OTHERRULE: setrule_secobject(&objstore, msg->hash, DSBRID_OTHER, 0, 0, 1, 0); break; ++ default: return; break; ++ } ++ break; ++ case DSBNL_CMDUIDCAPADD: ++ cnew = kmem_cache_zalloc(dsb_uidcap_cache, GFP_NOFS); ++ if(!cnew) return; ++ cnew->uid = msg->uid; ++ cnew->caps = msg->listno; ++ insert_uidcap(&uidstore, cnew); ++ break; ++ case DSBNL_CMDUIDCAPREMOVE: ++ delete_uidcap(&uidstore, msg->uid); ++ break; ++ case DSBNL_CMDUIDCAPCHANGE: ++ delete_uidcap(&uidstore, msg->uid); ++ cnew = kmem_cache_zalloc(dsb_uidcap_cache, GFP_NOFS); ++ if(!cnew) return; ++ ++ cnew->uid = msg->uid; ++ cnew->caps = msg->listno; ++ insert_uidcap(&uidstore, cnew); ++ break; ++ } ++ ++ ++ return; ++} ++ ++#include ++#include ++ ++struct dsb_net { ++ struct sock *nlsk; ++}; ++#if 0 ++static int __net_init dsb_net_init(struct net *net) ++{ ++ struct netlink_kernel_cfg cfg = { ++ .input = policy_rec, ++ .flags = NL_CFG_F_NONROOT_RECV, ++ .groups = 1, ++ }; ++ ++ struct dsb_net *dsbnet = net_generic(net, dsb_net_id); ++ ++ dsbnet->nlsk = netlink_kernel_create(net, NETLINK_GENERIC, &cfg); ++ if (dsbnet->nlsk == NULL) { ++ panic("cannot initialize netlink socket in namespace"); ++ return -ENOMEM; ++ } ++ dsbnet->nlsk->sk_sndtimeo = MAX_SCHEDULE_TIMEOUT; ++ return 0; ++} ++ ++static void __net_exit dsb_net_exit(struct net *net) ++{ ++ struct dsb_net *dsbnet = net_generic(net, dsb_net_id); ++ struct sock *sock = dsbnet->nlsk; ++ ++ RCU_INIT_POINTER(dsbnet->nlsk, NULL); ++ synchronize_net(); ++ netlink_kernel_release(sock); ++} ++ ++static struct pernet_operations dsb_net_ops __net_initdata = { ++ .init = dsb_net_init, ++ .exit = dsb_net_exit, ++ .id = &dsb_net_id, ++ .size = sizeof(struct dsb_net), ++}; ++#endif ++ ++static int __init dsb_init(void) ++{ ++ struct netlink_kernel_cfg nl_policycfg = { ++ .flags = NL_CFG_F_NONROOT_RECV, ++ .groups = 1, ++ }; ++ //struct netlink_kernel_cfg nl_eventcfg = {0}; ++ ++ if (!security_module_enable(&dsb_ops)) ++ return 0; ++ ++ printk(KERN_INFO "DSB: starting.\n"); ++ ++ if (register_security(&dsb_ops)) ++ panic("DSB: kernel registration failed.\n"); ++ ++ dsb_inode_cache = kmem_cache_create("dsb_inode_security", ++ sizeof(struct dsb_isecurity), ++ 0, SLAB_PANIC, NULL); ++ dsb_sentry_cache = kmem_cache_create("dsb_object_security", ++ sizeof(struct dsb_objsecurity), ++ 0, SLAB_PANIC, NULL); ++ dsb_uidcap_cache = kmem_cache_create("dsb_uidcap_security", ++ sizeof(struct dsb_usercaps), ++ 0, SLAB_PANIC, NULL); ++ ++ /* init rwlock for the storage */ ++ objrwlock = kmalloc(sizeof(struct rw_semaphore), GFP_KERNEL); ++ init_rwsem(objrwlock); ++ ++ usercapslock = kmalloc(sizeof(struct rw_semaphore), GFP_KERNEL); ++ init_rwsem(usercapslock); ++ ++ /* create netlink sockets */ ++ nl_policycfg.input = policy_rec; ++ //register_pernet_subsys(&dsb_net_ops); ++ //inpolicy = netlink_kernel_create(&init_net, NETLINK_DSBPOLICY, &nl_policycfg); ++ //outaudit = netlink_kernel_create(&init_net, NETLINK_DSBEVENTS, &nl_eventcfg); ++ ++ return 0; ++} ++ ++static int __init dsbnl_init(void) ++{ ++ // register_pernet_subsys(&dsb_net_ops); ++ struct netlink_kernel_cfg nl_policycfg = { ++ .flags = NL_CFG_F_NONROOT_RECV, ++ .groups = 2, ++ .input = policy_rec, ++ }; ++ struct netlink_kernel_cfg nl_eventcfg = { ++ .flags = NL_CFG_F_NONROOT_RECV, ++ .groups = 2, ++ }; ++ ++ ++ inpolicy = netlink_kernel_create(&init_net, 31, &nl_policycfg); ++ outaudit = netlink_kernel_create(&init_net, 30, &nl_eventcfg); ++ printk(KERN_INFO "DSB: Netlink initied.\n"); ++ ++ return 0; ++} ++ ++security_initcall(dsb_init); ++ ++__initcall(dsbnl_init); ++ ++#endif /* CONFIG_SECURITY_dsb */ ++ +diff -Nru linux-3.18.25.orig/security/dsb/Kconfig linux-3.18.25/security/dsb/Kconfig +--- linux-3.18.25.orig/security/dsb/Kconfig 1970-01-01 02:00:00.000000000 +0200 ++++ linux-3.18.25/security/dsb/Kconfig 2016-01-11 02:13:56.000000000 +0200 +@@ -0,0 +1,13 @@ ++config SECURITY_DSB ++ bool "DSB support" ++ depends on SECURITY ++ select SECURITYFS ++ select SECURITY_PATH ++ default n ++ help ++ This selects DSB, which extends DAC support with additional ++ system-wide security settings beyond regular Linux discretionary ++ access controls. Currently available is ptrace scope restriction. ++ ++ If you are unsure how to answer this question, answer N. ++ +diff -Nru linux-3.18.25.orig/security/dsb/Makefile linux-3.18.25/security/dsb/Makefile +--- linux-3.18.25.orig/security/dsb/Makefile 1970-01-01 02:00:00.000000000 +0200 ++++ linux-3.18.25/security/dsb/Makefile 2016-01-11 02:18:43.000000000 +0200 +@@ -0,0 +1,3 @@ ++obj-$(CONFIG_SECURITY_DSB) := dsb.o ++ ++#dsb-y := dsb.o +diff -Nru linux-3.18.25.orig/security/Kconfig linux-3.18.25/security/Kconfig +--- linux-3.18.25.orig/security/Kconfig 2015-12-15 19:45:27.000000000 +0200 ++++ linux-3.18.25/security/Kconfig 2016-01-11 02:09:11.000000000 +0200 +@@ -122,6 +122,7 @@ + source security/tomoyo/Kconfig + source security/apparmor/Kconfig + source security/yama/Kconfig ++source security/dsb/Kconfig + + source security/integrity/Kconfig + +@@ -132,6 +133,7 @@ + default DEFAULT_SECURITY_TOMOYO if SECURITY_TOMOYO + default DEFAULT_SECURITY_APPARMOR if SECURITY_APPARMOR + default DEFAULT_SECURITY_YAMA if SECURITY_YAMA ++ default DEFAULT_SECURITY_DSB if SECURITY_DSB + default DEFAULT_SECURITY_DAC + + help +@@ -153,6 +155,9 @@ + config DEFAULT_SECURITY_YAMA + bool "Yama" if SECURITY_YAMA=y + ++ config DEFAULT_SECURITY_DSB ++ bool "DSB" if SECURITY_DSB=y ++ + config DEFAULT_SECURITY_DAC + bool "Unix Discretionary Access Controls" + +@@ -165,6 +170,7 @@ + default "tomoyo" if DEFAULT_SECURITY_TOMOYO + default "apparmor" if DEFAULT_SECURITY_APPARMOR + default "yama" if DEFAULT_SECURITY_YAMA ++ default "dsb" if DEFAULT_SECURITY_DSB + default "" if DEFAULT_SECURITY_DAC + + endmenu +diff -Nru linux-3.18.25.orig/security/Makefile linux-3.18.25/security/Makefile +--- linux-3.18.25.orig/security/Makefile 2015-12-15 19:45:27.000000000 +0200 ++++ linux-3.18.25/security/Makefile 2016-01-11 02:09:49.000000000 +0200 +@@ -8,6 +8,7 @@ + subdir-$(CONFIG_SECURITY_TOMOYO) += tomoyo + subdir-$(CONFIG_SECURITY_APPARMOR) += apparmor + subdir-$(CONFIG_SECURITY_YAMA) += yama ++subdir-$(CONFIG_SECURITY_DSB) += dsb + + # always enable default capabilities + obj-y += commoncap.o +@@ -22,6 +23,7 @@ + obj-$(CONFIG_SECURITY_TOMOYO) += tomoyo/ + obj-$(CONFIG_SECURITY_APPARMOR) += apparmor/ + obj-$(CONFIG_SECURITY_YAMA) += yama/ ++obj-$(CONFIG_SECURITY_DSB) += dsb/ + obj-$(CONFIG_CGROUP_DEVICE) += device_cgroup.o + + # Object integrity file lists