mon_main.c 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * The USB Monitor, inspired by Dave Harding's USBMon.
  4. *
  5. * mon_main.c: Main file, module initiation and exit, registrations, etc.
  6. *
  7. * Copyright (C) 2005 Pete Zaitcev (zaitcev@redhat.com)
  8. */
  9. #include <linux/kernel.h>
  10. #include <linux/module.h>
  11. #include <linux/usb.h>
  12. #include <linux/usb/hcd.h>
  13. #include <linux/slab.h>
  14. #include <linux/notifier.h>
  15. #include <linux/mutex.h>
  16. #include "usb_mon.h"
  17. static void mon_stop(struct mon_bus *mbus);
  18. static void mon_dissolve(struct mon_bus *mbus, struct usb_bus *ubus);
  19. static void mon_bus_drop(struct kref *r);
  20. static void mon_bus_init(struct usb_bus *ubus);
  21. DEFINE_MUTEX(mon_lock);
  22. struct mon_bus mon_bus0; /* Pseudo bus meaning "all buses" */
  23. static LIST_HEAD(mon_buses); /* All buses we know: struct mon_bus */
  24. /*
  25. * Link a reader into the bus.
  26. *
  27. * This must be called with mon_lock taken because of mbus->ref.
  28. */
  29. void mon_reader_add(struct mon_bus *mbus, struct mon_reader *r)
  30. {
  31. unsigned long flags;
  32. struct list_head *p;
  33. spin_lock_irqsave(&mbus->lock, flags);
  34. if (mbus->nreaders == 0) {
  35. if (mbus == &mon_bus0) {
  36. list_for_each (p, &mon_buses) {
  37. struct mon_bus *m1;
  38. m1 = list_entry(p, struct mon_bus, bus_link);
  39. m1->u_bus->monitored = 1;
  40. }
  41. } else {
  42. mbus->u_bus->monitored = 1;
  43. }
  44. }
  45. mbus->nreaders++;
  46. list_add_tail(&r->r_link, &mbus->r_list);
  47. spin_unlock_irqrestore(&mbus->lock, flags);
  48. kref_get(&mbus->ref);
  49. }
  50. /*
  51. * Unlink reader from the bus.
  52. *
  53. * This is called with mon_lock taken, so we can decrement mbus->ref.
  54. */
  55. void mon_reader_del(struct mon_bus *mbus, struct mon_reader *r)
  56. {
  57. unsigned long flags;
  58. spin_lock_irqsave(&mbus->lock, flags);
  59. list_del(&r->r_link);
  60. --mbus->nreaders;
  61. if (mbus->nreaders == 0)
  62. mon_stop(mbus);
  63. spin_unlock_irqrestore(&mbus->lock, flags);
  64. kref_put(&mbus->ref, mon_bus_drop);
  65. }
  66. /*
  67. */
  68. static void mon_bus_submit(struct mon_bus *mbus, struct urb *urb)
  69. {
  70. unsigned long flags;
  71. struct mon_reader *r;
  72. spin_lock_irqsave(&mbus->lock, flags);
  73. mbus->cnt_events++;
  74. list_for_each_entry(r, &mbus->r_list, r_link)
  75. r->rnf_submit(r->r_data, urb);
  76. spin_unlock_irqrestore(&mbus->lock, flags);
  77. }
  78. static void mon_submit(struct usb_bus *ubus, struct urb *urb)
  79. {
  80. struct mon_bus *mbus;
  81. mbus = ubus->mon_bus;
  82. if (mbus != NULL)
  83. mon_bus_submit(mbus, urb);
  84. mon_bus_submit(&mon_bus0, urb);
  85. }
  86. /*
  87. */
  88. static void mon_bus_submit_error(struct mon_bus *mbus, struct urb *urb, int error)
  89. {
  90. unsigned long flags;
  91. struct mon_reader *r;
  92. spin_lock_irqsave(&mbus->lock, flags);
  93. mbus->cnt_events++;
  94. list_for_each_entry(r, &mbus->r_list, r_link)
  95. r->rnf_error(r->r_data, urb, error);
  96. spin_unlock_irqrestore(&mbus->lock, flags);
  97. }
  98. static void mon_submit_error(struct usb_bus *ubus, struct urb *urb, int error)
  99. {
  100. struct mon_bus *mbus;
  101. mbus = ubus->mon_bus;
  102. if (mbus != NULL)
  103. mon_bus_submit_error(mbus, urb, error);
  104. mon_bus_submit_error(&mon_bus0, urb, error);
  105. }
  106. /*
  107. */
  108. static void mon_bus_complete(struct mon_bus *mbus, struct urb *urb, int status)
  109. {
  110. unsigned long flags;
  111. struct mon_reader *r;
  112. spin_lock_irqsave(&mbus->lock, flags);
  113. mbus->cnt_events++;
  114. list_for_each_entry(r, &mbus->r_list, r_link)
  115. r->rnf_complete(r->r_data, urb, status);
  116. spin_unlock_irqrestore(&mbus->lock, flags);
  117. }
  118. static void mon_complete(struct usb_bus *ubus, struct urb *urb, int status)
  119. {
  120. struct mon_bus *mbus;
  121. mbus = ubus->mon_bus;
  122. if (mbus != NULL)
  123. mon_bus_complete(mbus, urb, status);
  124. mon_bus_complete(&mon_bus0, urb, status);
  125. }
  126. /* int (*unlink_urb) (struct urb *urb, int status); */
  127. /*
  128. * Stop monitoring.
  129. */
  130. static void mon_stop(struct mon_bus *mbus)
  131. {
  132. struct usb_bus *ubus;
  133. if (mbus == &mon_bus0) {
  134. list_for_each_entry(mbus, &mon_buses, bus_link) {
  135. /*
  136. * We do not change nreaders here, so rely on mon_lock.
  137. */
  138. if (mbus->nreaders == 0 && (ubus = mbus->u_bus) != NULL)
  139. ubus->monitored = 0;
  140. }
  141. } else {
  142. /*
  143. * A stop can be called for a dissolved mon_bus in case of
  144. * a reader staying across an rmmod foo_hcd, so test ->u_bus.
  145. */
  146. if (mon_bus0.nreaders == 0 && (ubus = mbus->u_bus) != NULL) {
  147. ubus->monitored = 0;
  148. mb();
  149. }
  150. }
  151. }
  152. /*
  153. * Add a USB bus (usually by a modprobe foo-hcd)
  154. *
  155. * This does not return an error code because the core cannot care less
  156. * if monitoring is not established.
  157. */
  158. static void mon_bus_add(struct usb_bus *ubus)
  159. {
  160. mon_bus_init(ubus);
  161. mutex_lock(&mon_lock);
  162. if (mon_bus0.nreaders != 0)
  163. ubus->monitored = 1;
  164. mutex_unlock(&mon_lock);
  165. }
  166. /*
  167. * Remove a USB bus (either from rmmod foo-hcd or from a hot-remove event).
  168. */
  169. static void mon_bus_remove(struct usb_bus *ubus)
  170. {
  171. struct mon_bus *mbus = ubus->mon_bus;
  172. mutex_lock(&mon_lock);
  173. list_del(&mbus->bus_link);
  174. if (mbus->text_inited)
  175. mon_text_del(mbus);
  176. if (mbus->bin_inited)
  177. mon_bin_del(mbus);
  178. mon_dissolve(mbus, ubus);
  179. kref_put(&mbus->ref, mon_bus_drop);
  180. mutex_unlock(&mon_lock);
  181. }
  182. static int mon_notify(struct notifier_block *self, unsigned long action,
  183. void *dev)
  184. {
  185. switch (action) {
  186. case USB_BUS_ADD:
  187. mon_bus_add(dev);
  188. break;
  189. case USB_BUS_REMOVE:
  190. mon_bus_remove(dev);
  191. }
  192. return NOTIFY_OK;
  193. }
  194. static struct notifier_block mon_nb = {
  195. .notifier_call = mon_notify,
  196. };
  197. /*
  198. * Ops
  199. */
  200. static const struct usb_mon_operations mon_ops_0 = {
  201. .urb_submit = mon_submit,
  202. .urb_submit_error = mon_submit_error,
  203. .urb_complete = mon_complete,
  204. };
  205. /*
  206. * Tear usb_bus and mon_bus apart.
  207. */
  208. static void mon_dissolve(struct mon_bus *mbus, struct usb_bus *ubus)
  209. {
  210. if (ubus->monitored) {
  211. ubus->monitored = 0;
  212. mb();
  213. }
  214. ubus->mon_bus = NULL;
  215. mbus->u_bus = NULL;
  216. mb();
  217. /* We want synchronize_irq() here, but that needs an argument. */
  218. }
  219. /*
  220. */
  221. static void mon_bus_drop(struct kref *r)
  222. {
  223. struct mon_bus *mbus = container_of(r, struct mon_bus, ref);
  224. kfree(mbus);
  225. }
  226. /*
  227. * Initialize a bus for us:
  228. * - allocate mon_bus
  229. * - refcount USB bus struct
  230. * - link
  231. */
  232. static void mon_bus_init(struct usb_bus *ubus)
  233. {
  234. struct mon_bus *mbus;
  235. mbus = kzalloc(sizeof(struct mon_bus), GFP_KERNEL);
  236. if (mbus == NULL)
  237. goto err_alloc;
  238. kref_init(&mbus->ref);
  239. spin_lock_init(&mbus->lock);
  240. INIT_LIST_HEAD(&mbus->r_list);
  241. /*
  242. * We don't need to take a reference to ubus, because we receive
  243. * a notification if the bus is about to be removed.
  244. */
  245. mbus->u_bus = ubus;
  246. ubus->mon_bus = mbus;
  247. mbus->text_inited = mon_text_add(mbus, ubus);
  248. mbus->bin_inited = mon_bin_add(mbus, ubus);
  249. mutex_lock(&mon_lock);
  250. list_add_tail(&mbus->bus_link, &mon_buses);
  251. mutex_unlock(&mon_lock);
  252. return;
  253. err_alloc:
  254. return;
  255. }
  256. static void mon_bus0_init(void)
  257. {
  258. struct mon_bus *mbus = &mon_bus0;
  259. kref_init(&mbus->ref);
  260. spin_lock_init(&mbus->lock);
  261. INIT_LIST_HEAD(&mbus->r_list);
  262. mbus->text_inited = mon_text_add(mbus, NULL);
  263. mbus->bin_inited = mon_bin_add(mbus, NULL);
  264. }
  265. /*
  266. * Search a USB bus by number. Notice that USB bus numbers start from one,
  267. * which we may later use to identify "all" with zero.
  268. *
  269. * This function must be called with mon_lock held.
  270. *
  271. * This is obviously inefficient and may be revised in the future.
  272. */
  273. struct mon_bus *mon_bus_lookup(unsigned int num)
  274. {
  275. struct mon_bus *mbus;
  276. if (num == 0) {
  277. return &mon_bus0;
  278. }
  279. list_for_each_entry(mbus, &mon_buses, bus_link) {
  280. if (mbus->u_bus->busnum == num) {
  281. return mbus;
  282. }
  283. }
  284. return NULL;
  285. }
  286. static int __init mon_init(void)
  287. {
  288. struct usb_bus *ubus;
  289. int rc, id;
  290. if ((rc = mon_text_init()) != 0)
  291. goto err_text;
  292. if ((rc = mon_bin_init()) != 0)
  293. goto err_bin;
  294. mon_bus0_init();
  295. if (usb_mon_register(&mon_ops_0) != 0) {
  296. printk(KERN_NOTICE TAG ": unable to register with the core\n");
  297. rc = -ENODEV;
  298. goto err_reg;
  299. }
  300. // MOD_INC_USE_COUNT(which_module?);
  301. mutex_lock(&usb_bus_idr_lock);
  302. idr_for_each_entry(&usb_bus_idr, ubus, id)
  303. mon_bus_init(ubus);
  304. usb_register_notify(&mon_nb);
  305. mutex_unlock(&usb_bus_idr_lock);
  306. return 0;
  307. err_reg:
  308. mon_bin_exit();
  309. err_bin:
  310. mon_text_exit();
  311. err_text:
  312. return rc;
  313. }
  314. static void __exit mon_exit(void)
  315. {
  316. struct mon_bus *mbus;
  317. struct list_head *p;
  318. usb_unregister_notify(&mon_nb);
  319. usb_mon_deregister();
  320. mutex_lock(&mon_lock);
  321. while (!list_empty(&mon_buses)) {
  322. p = mon_buses.next;
  323. mbus = list_entry(p, struct mon_bus, bus_link);
  324. list_del(p);
  325. if (mbus->text_inited)
  326. mon_text_del(mbus);
  327. if (mbus->bin_inited)
  328. mon_bin_del(mbus);
  329. /*
  330. * This never happens, because the open/close paths in
  331. * file level maintain module use counters and so rmmod fails
  332. * before reaching here. However, better be safe...
  333. */
  334. if (mbus->nreaders) {
  335. printk(KERN_ERR TAG
  336. ": Outstanding opens (%d) on usb%d, leaking...\n",
  337. mbus->nreaders, mbus->u_bus->busnum);
  338. kref_get(&mbus->ref); /* Force leak */
  339. }
  340. mon_dissolve(mbus, mbus->u_bus);
  341. kref_put(&mbus->ref, mon_bus_drop);
  342. }
  343. mbus = &mon_bus0;
  344. if (mbus->text_inited)
  345. mon_text_del(mbus);
  346. if (mbus->bin_inited)
  347. mon_bin_del(mbus);
  348. mutex_unlock(&mon_lock);
  349. mon_text_exit();
  350. mon_bin_exit();
  351. }
  352. module_init(mon_init);
  353. module_exit(mon_exit);
  354. MODULE_DESCRIPTION("USB Monitor");
  355. MODULE_LICENSE("GPL");