lguest_user.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446
  1. /*P:200 This contains all the /dev/lguest code, whereby the userspace
  2. * launcher controls and communicates with the Guest. For example,
  3. * the first write will tell us the Guest's memory layout and entry
  4. * point. A read will run the Guest until something happens, such as
  5. * a signal or the Guest accessing a device.
  6. :*/
  7. #include <linux/uaccess.h>
  8. #include <linux/miscdevice.h>
  9. #include <linux/fs.h>
  10. #include <linux/sched.h>
  11. #include <linux/sched/mm.h>
  12. #include <linux/file.h>
  13. #include <linux/slab.h>
  14. #include <linux/export.h>
  15. #include "lg.h"
  16. /*L:052
  17. The Launcher can get the registers, and also set some of them.
  18. */
  19. static int getreg_setup(struct lg_cpu *cpu, const unsigned long __user *input)
  20. {
  21. unsigned long which;
  22. /* We re-use the ptrace structure to specify which register to read. */
  23. if (get_user(which, input) != 0)
  24. return -EFAULT;
  25. /*
  26. * We set up the cpu register pointer, and their next read will
  27. * actually get the value (instead of running the guest).
  28. *
  29. * The last argument 'true' says we can access any register.
  30. */
  31. cpu->reg_read = lguest_arch_regptr(cpu, which, true);
  32. if (!cpu->reg_read)
  33. return -ENOENT;
  34. /* And because this is a write() call, we return the length used. */
  35. return sizeof(unsigned long) * 2;
  36. }
  37. static int setreg(struct lg_cpu *cpu, const unsigned long __user *input)
  38. {
  39. unsigned long which, value, *reg;
  40. /* We re-use the ptrace structure to specify which register to read. */
  41. if (get_user(which, input) != 0)
  42. return -EFAULT;
  43. input++;
  44. if (get_user(value, input) != 0)
  45. return -EFAULT;
  46. /* The last argument 'false' means we can't access all registers. */
  47. reg = lguest_arch_regptr(cpu, which, false);
  48. if (!reg)
  49. return -ENOENT;
  50. *reg = value;
  51. /* And because this is a write() call, we return the length used. */
  52. return sizeof(unsigned long) * 3;
  53. }
  54. /*L:050
  55. * Sending an interrupt is done by writing LHREQ_IRQ and an interrupt
  56. * number to /dev/lguest.
  57. */
  58. static int user_send_irq(struct lg_cpu *cpu, const unsigned long __user *input)
  59. {
  60. unsigned long irq;
  61. if (get_user(irq, input) != 0)
  62. return -EFAULT;
  63. if (irq >= LGUEST_IRQS)
  64. return -EINVAL;
  65. /*
  66. * Next time the Guest runs, the core code will see if it can deliver
  67. * this interrupt.
  68. */
  69. set_interrupt(cpu, irq);
  70. return 0;
  71. }
  72. /*L:053
  73. * Deliver a trap: this is used by the Launcher if it can't emulate
  74. * an instruction.
  75. */
  76. static int trap(struct lg_cpu *cpu, const unsigned long __user *input)
  77. {
  78. unsigned long trapnum;
  79. if (get_user(trapnum, input) != 0)
  80. return -EFAULT;
  81. if (!deliver_trap(cpu, trapnum))
  82. return -EINVAL;
  83. return 0;
  84. }
  85. /*L:040
  86. * Once our Guest is initialized, the Launcher makes it run by reading
  87. * from /dev/lguest.
  88. */
  89. static ssize_t read(struct file *file, char __user *user, size_t size,loff_t*o)
  90. {
  91. struct lguest *lg = file->private_data;
  92. struct lg_cpu *cpu;
  93. unsigned int cpu_id = *o;
  94. /* You must write LHREQ_INITIALIZE first! */
  95. if (!lg)
  96. return -EINVAL;
  97. /* Watch out for arbitrary vcpu indexes! */
  98. if (cpu_id >= lg->nr_cpus)
  99. return -EINVAL;
  100. cpu = &lg->cpus[cpu_id];
  101. /* If you're not the task which owns the Guest, go away. */
  102. if (current != cpu->tsk)
  103. return -EPERM;
  104. /* If the Guest is already dead, we indicate why */
  105. if (lg->dead) {
  106. size_t len;
  107. /* lg->dead either contains an error code, or a string. */
  108. if (IS_ERR(lg->dead))
  109. return PTR_ERR(lg->dead);
  110. /* We can only return as much as the buffer they read with. */
  111. len = min(size, strlen(lg->dead)+1);
  112. if (copy_to_user(user, lg->dead, len) != 0)
  113. return -EFAULT;
  114. return len;
  115. }
  116. /*
  117. * If we returned from read() last time because the Guest sent I/O,
  118. * clear the flag.
  119. */
  120. if (cpu->pending.trap)
  121. cpu->pending.trap = 0;
  122. /* Run the Guest until something interesting happens. */
  123. return run_guest(cpu, (unsigned long __user *)user);
  124. }
  125. /*L:025
  126. * This actually initializes a CPU. For the moment, a Guest is only
  127. * uniprocessor, so "id" is always 0.
  128. */
  129. static int lg_cpu_start(struct lg_cpu *cpu, unsigned id, unsigned long start_ip)
  130. {
  131. /* We have a limited number of CPUs in the lguest struct. */
  132. if (id >= ARRAY_SIZE(cpu->lg->cpus))
  133. return -EINVAL;
  134. /* Set up this CPU's id, and pointer back to the lguest struct. */
  135. cpu->id = id;
  136. cpu->lg = container_of(cpu, struct lguest, cpus[id]);
  137. cpu->lg->nr_cpus++;
  138. /* Each CPU has a timer it can set. */
  139. init_clockdev(cpu);
  140. /*
  141. * We need a complete page for the Guest registers: they are accessible
  142. * to the Guest and we can only grant it access to whole pages.
  143. */
  144. cpu->regs_page = get_zeroed_page(GFP_KERNEL);
  145. if (!cpu->regs_page)
  146. return -ENOMEM;
  147. /* We actually put the registers at the end of the page. */
  148. cpu->regs = (void *)cpu->regs_page + PAGE_SIZE - sizeof(*cpu->regs);
  149. /*
  150. * Now we initialize the Guest's registers, handing it the start
  151. * address.
  152. */
  153. lguest_arch_setup_regs(cpu, start_ip);
  154. /*
  155. * We keep a pointer to the Launcher task (ie. current task) for when
  156. * other Guests want to wake this one (eg. console input).
  157. */
  158. cpu->tsk = current;
  159. /*
  160. * We need to keep a pointer to the Launcher's memory map, because if
  161. * the Launcher dies we need to clean it up. If we don't keep a
  162. * reference, it is destroyed before close() is called.
  163. */
  164. cpu->mm = get_task_mm(cpu->tsk);
  165. /*
  166. * We remember which CPU's pages this Guest used last, for optimization
  167. * when the same Guest runs on the same CPU twice.
  168. */
  169. cpu->last_pages = NULL;
  170. /* No error == success. */
  171. return 0;
  172. }
  173. /*L:020
  174. * The initialization write supplies 3 pointer sized (32 or 64 bit) values (in
  175. * addition to the LHREQ_INITIALIZE value). These are:
  176. *
  177. * base: The start of the Guest-physical memory inside the Launcher memory.
  178. *
  179. * pfnlimit: The highest (Guest-physical) page number the Guest should be
  180. * allowed to access. The Guest memory lives inside the Launcher, so it sets
  181. * this to ensure the Guest can only reach its own memory.
  182. *
  183. * start: The first instruction to execute ("eip" in x86-speak).
  184. */
  185. static int initialize(struct file *file, const unsigned long __user *input)
  186. {
  187. /* "struct lguest" contains all we (the Host) know about a Guest. */
  188. struct lguest *lg;
  189. int err;
  190. unsigned long args[4];
  191. /*
  192. * We grab the Big Lguest lock, which protects against multiple
  193. * simultaneous initializations.
  194. */
  195. mutex_lock(&lguest_lock);
  196. /* You can't initialize twice! Close the device and start again... */
  197. if (file->private_data) {
  198. err = -EBUSY;
  199. goto unlock;
  200. }
  201. if (copy_from_user(args, input, sizeof(args)) != 0) {
  202. err = -EFAULT;
  203. goto unlock;
  204. }
  205. lg = kzalloc(sizeof(*lg), GFP_KERNEL);
  206. if (!lg) {
  207. err = -ENOMEM;
  208. goto unlock;
  209. }
  210. /* Populate the easy fields of our "struct lguest" */
  211. lg->mem_base = (void __user *)args[0];
  212. lg->pfn_limit = args[1];
  213. lg->device_limit = args[3];
  214. /* This is the first cpu (cpu 0) and it will start booting at args[2] */
  215. err = lg_cpu_start(&lg->cpus[0], 0, args[2]);
  216. if (err)
  217. goto free_lg;
  218. /*
  219. * Initialize the Guest's shadow page tables. This allocates
  220. * memory, so can fail.
  221. */
  222. err = init_guest_pagetable(lg);
  223. if (err)
  224. goto free_regs;
  225. /* We keep our "struct lguest" in the file's private_data. */
  226. file->private_data = lg;
  227. mutex_unlock(&lguest_lock);
  228. /* And because this is a write() call, we return the length used. */
  229. return sizeof(args);
  230. free_regs:
  231. /* FIXME: This should be in free_vcpu */
  232. free_page(lg->cpus[0].regs_page);
  233. free_lg:
  234. kfree(lg);
  235. unlock:
  236. mutex_unlock(&lguest_lock);
  237. return err;
  238. }
  239. /*L:010
  240. * The first operation the Launcher does must be a write. All writes
  241. * start with an unsigned long number: for the first write this must be
  242. * LHREQ_INITIALIZE to set up the Guest. After that the Launcher can use
  243. * writes of other values to send interrupts or set up receipt of notifications.
  244. *
  245. * Note that we overload the "offset" in the /dev/lguest file to indicate what
  246. * CPU number we're dealing with. Currently this is always 0 since we only
  247. * support uniprocessor Guests, but you can see the beginnings of SMP support
  248. * here.
  249. */
  250. static ssize_t write(struct file *file, const char __user *in,
  251. size_t size, loff_t *off)
  252. {
  253. /*
  254. * Once the Guest is initialized, we hold the "struct lguest" in the
  255. * file private data.
  256. */
  257. struct lguest *lg = file->private_data;
  258. const unsigned long __user *input = (const unsigned long __user *)in;
  259. unsigned long req;
  260. struct lg_cpu *uninitialized_var(cpu);
  261. unsigned int cpu_id = *off;
  262. /* The first value tells us what this request is. */
  263. if (get_user(req, input) != 0)
  264. return -EFAULT;
  265. input++;
  266. /* If you haven't initialized, you must do that first. */
  267. if (req != LHREQ_INITIALIZE) {
  268. if (!lg || (cpu_id >= lg->nr_cpus))
  269. return -EINVAL;
  270. cpu = &lg->cpus[cpu_id];
  271. /* Once the Guest is dead, you can only read() why it died. */
  272. if (lg->dead)
  273. return -ENOENT;
  274. }
  275. switch (req) {
  276. case LHREQ_INITIALIZE:
  277. return initialize(file, input);
  278. case LHREQ_IRQ:
  279. return user_send_irq(cpu, input);
  280. case LHREQ_GETREG:
  281. return getreg_setup(cpu, input);
  282. case LHREQ_SETREG:
  283. return setreg(cpu, input);
  284. case LHREQ_TRAP:
  285. return trap(cpu, input);
  286. default:
  287. return -EINVAL;
  288. }
  289. }
  290. static int open(struct inode *inode, struct file *file)
  291. {
  292. file->private_data = NULL;
  293. return 0;
  294. }
  295. /*L:060
  296. * The final piece of interface code is the close() routine. It reverses
  297. * everything done in initialize(). This is usually called because the
  298. * Launcher exited.
  299. *
  300. * Note that the close routine returns 0 or a negative error number: it can't
  301. * really fail, but it can whine. I blame Sun for this wart, and K&R C for
  302. * letting them do it.
  303. :*/
  304. static int close(struct inode *inode, struct file *file)
  305. {
  306. struct lguest *lg = file->private_data;
  307. unsigned int i;
  308. /* If we never successfully initialized, there's nothing to clean up */
  309. if (!lg)
  310. return 0;
  311. /*
  312. * We need the big lock, to protect from inter-guest I/O and other
  313. * Launchers initializing guests.
  314. */
  315. mutex_lock(&lguest_lock);
  316. /* Free up the shadow page tables for the Guest. */
  317. free_guest_pagetable(lg);
  318. for (i = 0; i < lg->nr_cpus; i++) {
  319. /* Cancels the hrtimer set via LHCALL_SET_CLOCKEVENT. */
  320. hrtimer_cancel(&lg->cpus[i].hrt);
  321. /* We can free up the register page we allocated. */
  322. free_page(lg->cpus[i].regs_page);
  323. /*
  324. * Now all the memory cleanups are done, it's safe to release
  325. * the Launcher's memory management structure.
  326. */
  327. mmput(lg->cpus[i].mm);
  328. }
  329. /*
  330. * If lg->dead doesn't contain an error code it will be NULL or a
  331. * kmalloc()ed string, either of which is ok to hand to kfree().
  332. */
  333. if (!IS_ERR(lg->dead))
  334. kfree(lg->dead);
  335. /* Free the memory allocated to the lguest_struct */
  336. kfree(lg);
  337. /* Release lock and exit. */
  338. mutex_unlock(&lguest_lock);
  339. return 0;
  340. }
  341. /*L:000
  342. * Welcome to our journey through the Launcher!
  343. *
  344. * The Launcher is the Host userspace program which sets up, runs and services
  345. * the Guest. In fact, many comments in the Drivers which refer to "the Host"
  346. * doing things are inaccurate: the Launcher does all the device handling for
  347. * the Guest, but the Guest can't know that.
  348. *
  349. * Just to confuse you: to the Host kernel, the Launcher *is* the Guest and we
  350. * shall see more of that later.
  351. *
  352. * We begin our understanding with the Host kernel interface which the Launcher
  353. * uses: reading and writing a character device called /dev/lguest. All the
  354. * work happens in the read(), write() and close() routines:
  355. */
  356. static const struct file_operations lguest_fops = {
  357. .owner = THIS_MODULE,
  358. .open = open,
  359. .release = close,
  360. .write = write,
  361. .read = read,
  362. .llseek = default_llseek,
  363. };
  364. /*:*/
  365. /*
  366. * This is a textbook example of a "misc" character device. Populate a "struct
  367. * miscdevice" and register it with misc_register().
  368. */
  369. static struct miscdevice lguest_dev = {
  370. .minor = MISC_DYNAMIC_MINOR,
  371. .name = "lguest",
  372. .fops = &lguest_fops,
  373. };
  374. int __init lguest_device_init(void)
  375. {
  376. return misc_register(&lguest_dev);
  377. }
  378. void __exit lguest_device_remove(void)
  379. {
  380. misc_deregister(&lguest_dev);
  381. }