+ -
当前位置:首页 → 问答吧 → 作业求助:添加系统调用

作业求助:添加系统调用

时间:2011-06-30

来源:互联网

我在上一门FreeBSD的课。这个作业要添加如下系统调用:
  1. 515 AUE_NULL STD { int uidkill(uid_t uid, int signum); }
复制代码
该系统调用把signum指定的signal发送给uid拥有的所有进程,当前这个进程除外。老师说要先看kill(2)的实现,但是看不太懂啊。还有要求要做安全检查,比如priv_check(9). 请各位大牛指点一二。感觉无从下手。如果能给个例子最好。谢谢!
以下是kill(2)的实现:
  1. 1687 kill(struct thread *td, struct kill_args *uap)
  2. 1688 {
  3. 1689         ksiginfo_t ksi;
  4. 1690         struct proc *p;
  5. 1691         int error;
  6. 1692
  7. 1693         AUDIT_ARG_SIGNUM(uap->signum);
  8. 1694         AUDIT_ARG_PID(uap->pid);
  9. 1695         if ((u_int)uap->signum > _SIG_MAXSIG)
  10. 1696                 return (EINVAL);
  11. 1697
  12. 1698         ksiginfo_init(&ksi);
  13. 1699         ksi.ksi_signo = uap->signum;
  14. 1700         ksi.ksi_code = SI_USER;
  15. 1701         ksi.ksi_pid = td->td_proc->p_pid;
  16. 1702         ksi.ksi_uid = td->td_ucred->cr_ruid;
  17. 1703
  18. 1704         if (uap->pid > 0) {
  19. 1705                 /* kill single process */
  20. 1706                 if ((p = pfind(uap->pid)) == NULL) {
  21. 1707                         if ((p = zpfind(uap->pid)) == NULL)
  22. 1708                                 return (ESRCH);
  23. 1709                 }
  24. 1710                 AUDIT_ARG_PROCESS(p);
  25. 1711                 error = p_cansignal(td, p, uap->signum);
  26. 1712                 if (error == 0 && uap->signum)
  27. 1713                         pksignal(p, uap->signum, &ksi);
  28. 1714                 PROC_UNLOCK(p);
  29. 1715                 return (error);
  30. 1716         }
  31. 1717         switch (uap->pid) {
  32. 1718         case -1:                /* broadcast signal */
  33. 1719                 return (killpg1(td, uap->signum, 0, 1, &ksi));
  34. 1720         case 0:                 /* signal own process group */
  35. 1721                 return (killpg1(td, uap->signum, 0, 0, &ksi));
  36. 1722         default:                /* negative explicit process group */
  37. 1723                 return (killpg1(td, uap->signum, -uap->pid, 0, &ksi));
  38. 1724         }
  39. 1725         /* NOTREACHED */
  40. 1726 }
复制代码

作者: exorcistkiller   发布时间: 2011-06-30

哪个大学?
羡慕。。。

作者: hniu   发布时间: 2011-06-30