af_packet.c 42 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907
  1. /*
  2. * INET An implementation of the TCP/IP protocol suite for the LINUX
  3. * operating system. INET is implemented using the BSD Socket
  4. * interface as the means of communication with the user level.
  5. *
  6. * PACKET - implements raw packet sockets.
  7. *
  8. * Version: $Id: af_packet.c,v 1.61 2002/02/08 03:57:19 davem Exp $
  9. *
  10. * Authors: Ross Biro
  11. * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  12. * Alan Cox, <gw4pts@gw4pts.ampr.org>
  13. *
  14. * Fixes:
  15. * Alan Cox : verify_area() now used correctly
  16. * Alan Cox : new skbuff lists, look ma no backlogs!
  17. * Alan Cox : tidied skbuff lists.
  18. * Alan Cox : Now uses generic datagram routines I
  19. * added. Also fixed the peek/read crash
  20. * from all old Linux datagram code.
  21. * Alan Cox : Uses the improved datagram code.
  22. * Alan Cox : Added NULL's for socket options.
  23. * Alan Cox : Re-commented the code.
  24. * Alan Cox : Use new kernel side addressing
  25. * Rob Janssen : Correct MTU usage.
  26. * Dave Platt : Counter leaks caused by incorrect
  27. * interrupt locking and some slightly
  28. * dubious gcc output. Can you read
  29. * compiler: it said _VOLATILE_
  30. * Richard Kooijman : Timestamp fixes.
  31. * Alan Cox : New buffers. Use sk->mac.raw.
  32. * Alan Cox : sendmsg/recvmsg support.
  33. * Alan Cox : Protocol setting support
  34. * Alexey Kuznetsov : Untied from IPv4 stack.
  35. * Cyrus Durgin : Fixed kerneld for kmod.
  36. * Michal Ostrowski : Module initialization cleanup.
  37. * Ulises Alonso : Frame number limit removal and
  38. * packet_set_ring memory leak.
  39. *
  40. * This program is free software; you can redistribute it and/or
  41. * modify it under the terms of the GNU General Public License
  42. * as published by the Free Software Foundation; either version
  43. * 2 of the License, or (at your option) any later version.
  44. *
  45. */
  46. #include <linux/config.h>
  47. #include <linux/types.h>
  48. #include <linux/sched.h>
  49. #include <linux/mm.h>
  50. #include <linux/fcntl.h>
  51. #include <linux/socket.h>
  52. #include <linux/in.h>
  53. #include <linux/inet.h>
  54. #include <linux/netdevice.h>
  55. #include <linux/if_packet.h>
  56. #include <linux/wireless.h>
  57. #include <linux/kmod.h>
  58. #include <net/ip.h>
  59. #include <net/protocol.h>
  60. #include <linux/skbuff.h>
  61. #include <net/sock.h>
  62. #include <linux/errno.h>
  63. #include <linux/timer.h>
  64. #include <asm/system.h>
  65. #include <asm/uaccess.h>
  66. #include <asm/ioctls.h>
  67. #include <asm/page.h>
  68. #include <asm/io.h>
  69. #include <linux/proc_fs.h>
  70. #include <linux/seq_file.h>
  71. #include <linux/poll.h>
  72. #include <linux/module.h>
  73. #include <linux/init.h>
  74. #ifdef CONFIG_INET
  75. #include <net/inet_common.h>
  76. #endif
  77. #define CONFIG_SOCK_PACKET 1
  78. /*
  79. Proposed replacement for SIOC{ADD,DEL}MULTI and
  80. IFF_PROMISC, IFF_ALLMULTI flags.
  81. It is more expensive, but I believe,
  82. it is really correct solution: reentereble, safe and fault tolerant.
  83. IFF_PROMISC/IFF_ALLMULTI/SIOC{ADD/DEL}MULTI are faked by keeping
  84. reference count and global flag, so that real status is
  85. (gflag|(count != 0)), so that we can use obsolete faulty interface
  86. not harming clever users.
  87. */
  88. #define CONFIG_PACKET_MULTICAST 1
  89. /*
  90. Assumptions:
  91. - if device has no dev->hard_header routine, it adds and removes ll header
  92. inside itself. In this case ll header is invisible outside of device,
  93. but higher levels still should reserve dev->hard_header_len.
  94. Some devices are enough clever to reallocate skb, when header
  95. will not fit to reserved space (tunnel), another ones are silly
  96. (PPP).
  97. - packet socket receives packets with pulled ll header,
  98. so that SOCK_RAW should push it back.
  99. On receive:
  100. -----------
  101. Incoming, dev->hard_header!=NULL
  102. mac.raw -> ll header
  103. data -> data
  104. Outgoing, dev->hard_header!=NULL
  105. mac.raw -> ll header
  106. data -> ll header
  107. Incoming, dev->hard_header==NULL
  108. mac.raw -> UNKNOWN position. It is very likely, that it points to ll header.
  109. PPP makes it, that is wrong, because introduce assymetry
  110. between rx and tx paths.
  111. data -> data
  112. Outgoing, dev->hard_header==NULL
  113. mac.raw -> data. ll header is still not built!
  114. data -> data
  115. Resume
  116. If dev->hard_header==NULL we are unlikely to restore sensible ll header.
  117. On transmit:
  118. ------------
  119. dev->hard_header != NULL
  120. mac.raw -> ll header
  121. data -> ll header
  122. dev->hard_header == NULL (ll header is added by device, we cannot control it)
  123. mac.raw -> data
  124. data -> data
  125. We should set nh.raw on output to correct posistion,
  126. packet classifier depends on it.
  127. */
  128. /* List of all packet sockets. */
  129. static HLIST_HEAD(packet_sklist);
  130. static DEFINE_RWLOCK(packet_sklist_lock);
  131. static atomic_t packet_socks_nr;
  132. /* Private packet socket structures. */
  133. #ifdef CONFIG_PACKET_MULTICAST
  134. struct packet_mclist
  135. {
  136. struct packet_mclist *next;
  137. int ifindex;
  138. int count;
  139. unsigned short type;
  140. unsigned short alen;
  141. unsigned char addr[8];
  142. };
  143. #endif
  144. #ifdef CONFIG_PACKET_MMAP
  145. static int packet_set_ring(struct sock *sk, struct tpacket_req *req, int closing);
  146. #endif
  147. static void packet_flush_mclist(struct sock *sk);
  148. struct packet_sock {
  149. /* struct sock has to be the first member of packet_sock */
  150. struct sock sk;
  151. struct tpacket_stats stats;
  152. #ifdef CONFIG_PACKET_MMAP
  153. char * *pg_vec;
  154. unsigned int head;
  155. unsigned int frames_per_block;
  156. unsigned int frame_size;
  157. unsigned int frame_max;
  158. int copy_thresh;
  159. #endif
  160. struct packet_type prot_hook;
  161. spinlock_t bind_lock;
  162. char running; /* prot_hook is attached*/
  163. int ifindex; /* bound device */
  164. unsigned short num;
  165. #ifdef CONFIG_PACKET_MULTICAST
  166. struct packet_mclist *mclist;
  167. #endif
  168. #ifdef CONFIG_PACKET_MMAP
  169. atomic_t mapped;
  170. unsigned int pg_vec_order;
  171. unsigned int pg_vec_pages;
  172. unsigned int pg_vec_len;
  173. #endif
  174. };
  175. #ifdef CONFIG_PACKET_MMAP
  176. static inline char *packet_lookup_frame(struct packet_sock *po, unsigned int position)
  177. {
  178. unsigned int pg_vec_pos, frame_offset;
  179. char *frame;
  180. pg_vec_pos = position / po->frames_per_block;
  181. frame_offset = position % po->frames_per_block;
  182. frame = po->pg_vec[pg_vec_pos] + (frame_offset * po->frame_size);
  183. return frame;
  184. }
  185. #endif
  186. static inline struct packet_sock *pkt_sk(struct sock *sk)
  187. {
  188. return (struct packet_sock *)sk;
  189. }
  190. static void packet_sock_destruct(struct sock *sk)
  191. {
  192. BUG_TRAP(!atomic_read(&sk->sk_rmem_alloc));
  193. BUG_TRAP(!atomic_read(&sk->sk_wmem_alloc));
  194. if (!sock_flag(sk, SOCK_DEAD)) {
  195. printk("Attempt to release alive packet socket: %p\n", sk);
  196. return;
  197. }
  198. atomic_dec(&packet_socks_nr);
  199. #ifdef PACKET_REFCNT_DEBUG
  200. printk(KERN_DEBUG "PACKET socket %p is free, %d are alive\n", sk, atomic_read(&packet_socks_nr));
  201. #endif
  202. }
  203. static struct proto_ops packet_ops;
  204. #ifdef CONFIG_SOCK_PACKET
  205. static struct proto_ops packet_ops_spkt;
  206. static int packet_rcv_spkt(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
  207. {
  208. struct sock *sk;
  209. struct sockaddr_pkt *spkt;
  210. /*
  211. * When we registered the protocol we saved the socket in the data
  212. * field for just this event.
  213. */
  214. sk = pt->af_packet_priv;
  215. /*
  216. * Yank back the headers [hope the device set this
  217. * right or kerboom...]
  218. *
  219. * Incoming packets have ll header pulled,
  220. * push it back.
  221. *
  222. * For outgoing ones skb->data == skb->mac.raw
  223. * so that this procedure is noop.
  224. */
  225. if (skb->pkt_type == PACKET_LOOPBACK)
  226. goto out;
  227. if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL)
  228. goto oom;
  229. /* drop any routing info */
  230. dst_release(skb->dst);
  231. skb->dst = NULL;
  232. spkt = (struct sockaddr_pkt*)skb->cb;
  233. skb_push(skb, skb->data-skb->mac.raw);
  234. /*
  235. * The SOCK_PACKET socket receives _all_ frames.
  236. */
  237. spkt->spkt_family = dev->type;
  238. strlcpy(spkt->spkt_device, dev->name, sizeof(spkt->spkt_device));
  239. spkt->spkt_protocol = skb->protocol;
  240. /*
  241. * Charge the memory to the socket. This is done specifically
  242. * to prevent sockets using all the memory up.
  243. */
  244. if (sock_queue_rcv_skb(sk,skb) == 0)
  245. return 0;
  246. out:
  247. kfree_skb(skb);
  248. oom:
  249. return 0;
  250. }
  251. /*
  252. * Output a raw packet to a device layer. This bypasses all the other
  253. * protocol layers and you must therefore supply it with a complete frame
  254. */
  255. static int packet_sendmsg_spkt(struct kiocb *iocb, struct socket *sock,
  256. struct msghdr *msg, size_t len)
  257. {
  258. struct sock *sk = sock->sk;
  259. struct sockaddr_pkt *saddr=(struct sockaddr_pkt *)msg->msg_name;
  260. struct sk_buff *skb;
  261. struct net_device *dev;
  262. unsigned short proto=0;
  263. int err;
  264. /*
  265. * Get and verify the address.
  266. */
  267. if (saddr)
  268. {
  269. if (msg->msg_namelen < sizeof(struct sockaddr))
  270. return(-EINVAL);
  271. if (msg->msg_namelen==sizeof(struct sockaddr_pkt))
  272. proto=saddr->spkt_protocol;
  273. }
  274. else
  275. return(-ENOTCONN); /* SOCK_PACKET must be sent giving an address */
  276. /*
  277. * Find the device first to size check it
  278. */
  279. saddr->spkt_device[13] = 0;
  280. dev = dev_get_by_name(saddr->spkt_device);
  281. err = -ENODEV;
  282. if (dev == NULL)
  283. goto out_unlock;
  284. /*
  285. * You may not queue a frame bigger than the mtu. This is the lowest level
  286. * raw protocol and you must do your own fragmentation at this level.
  287. */
  288. err = -EMSGSIZE;
  289. if(len>dev->mtu+dev->hard_header_len)
  290. goto out_unlock;
  291. err = -ENOBUFS;
  292. skb = sock_wmalloc(sk, len + LL_RESERVED_SPACE(dev), 0, GFP_KERNEL);
  293. /*
  294. * If the write buffer is full, then tough. At this level the user gets to
  295. * deal with the problem - do your own algorithmic backoffs. That's far
  296. * more flexible.
  297. */
  298. if (skb == NULL)
  299. goto out_unlock;
  300. /*
  301. * Fill it in
  302. */
  303. /* FIXME: Save some space for broken drivers that write a
  304. * hard header at transmission time by themselves. PPP is the
  305. * notable one here. This should really be fixed at the driver level.
  306. */
  307. skb_reserve(skb, LL_RESERVED_SPACE(dev));
  308. skb->nh.raw = skb->data;
  309. /* Try to align data part correctly */
  310. if (dev->hard_header) {
  311. skb->data -= dev->hard_header_len;
  312. skb->tail -= dev->hard_header_len;
  313. if (len < dev->hard_header_len)
  314. skb->nh.raw = skb->data;
  315. }
  316. /* Returns -EFAULT on error */
  317. err = memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len);
  318. skb->protocol = proto;
  319. skb->dev = dev;
  320. skb->priority = sk->sk_priority;
  321. if (err)
  322. goto out_free;
  323. err = -ENETDOWN;
  324. if (!(dev->flags & IFF_UP))
  325. goto out_free;
  326. /*
  327. * Now send it
  328. */
  329. dev_queue_xmit(skb);
  330. dev_put(dev);
  331. return(len);
  332. out_free:
  333. kfree_skb(skb);
  334. out_unlock:
  335. if (dev)
  336. dev_put(dev);
  337. return err;
  338. }
  339. #endif
  340. static inline unsigned run_filter(struct sk_buff *skb, struct sock *sk, unsigned res)
  341. {
  342. struct sk_filter *filter;
  343. bh_lock_sock(sk);
  344. filter = sk->sk_filter;
  345. /*
  346. * Our caller already checked that filter != NULL but we need to
  347. * verify that under bh_lock_sock() to be safe
  348. */
  349. if (likely(filter != NULL))
  350. res = sk_run_filter(skb, filter->insns, filter->len);
  351. bh_unlock_sock(sk);
  352. return res;
  353. }
  354. /*
  355. This function makes lazy skb cloning in hope that most of packets
  356. are discarded by BPF.
  357. Note tricky part: we DO mangle shared skb! skb->data, skb->len
  358. and skb->cb are mangled. It works because (and until) packets
  359. falling here are owned by current CPU. Output packets are cloned
  360. by dev_queue_xmit_nit(), input packets are processed by net_bh
  361. sequencially, so that if we return skb to original state on exit,
  362. we will not harm anyone.
  363. */
  364. static int packet_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
  365. {
  366. struct sock *sk;
  367. struct sockaddr_ll *sll;
  368. struct packet_sock *po;
  369. u8 * skb_head = skb->data;
  370. int skb_len = skb->len;
  371. unsigned snaplen;
  372. if (skb->pkt_type == PACKET_LOOPBACK)
  373. goto drop;
  374. sk = pt->af_packet_priv;
  375. po = pkt_sk(sk);
  376. skb->dev = dev;
  377. if (dev->hard_header) {
  378. /* The device has an explicit notion of ll header,
  379. exported to higher levels.
  380. Otherwise, the device hides datails of it frame
  381. structure, so that corresponding packet head
  382. never delivered to user.
  383. */
  384. if (sk->sk_type != SOCK_DGRAM)
  385. skb_push(skb, skb->data - skb->mac.raw);
  386. else if (skb->pkt_type == PACKET_OUTGOING) {
  387. /* Special case: outgoing packets have ll header at head */
  388. skb_pull(skb, skb->nh.raw - skb->data);
  389. }
  390. }
  391. snaplen = skb->len;
  392. if (sk->sk_filter) {
  393. unsigned res = run_filter(skb, sk, snaplen);
  394. if (res == 0)
  395. goto drop_n_restore;
  396. if (snaplen > res)
  397. snaplen = res;
  398. }
  399. if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >=
  400. (unsigned)sk->sk_rcvbuf)
  401. goto drop_n_acct;
  402. if (skb_shared(skb)) {
  403. struct sk_buff *nskb = skb_clone(skb, GFP_ATOMIC);
  404. if (nskb == NULL)
  405. goto drop_n_acct;
  406. if (skb_head != skb->data) {
  407. skb->data = skb_head;
  408. skb->len = skb_len;
  409. }
  410. kfree_skb(skb);
  411. skb = nskb;
  412. }
  413. sll = (struct sockaddr_ll*)skb->cb;
  414. sll->sll_family = AF_PACKET;
  415. sll->sll_hatype = dev->type;
  416. sll->sll_protocol = skb->protocol;
  417. sll->sll_pkttype = skb->pkt_type;
  418. sll->sll_ifindex = dev->ifindex;
  419. sll->sll_halen = 0;
  420. if (dev->hard_header_parse)
  421. sll->sll_halen = dev->hard_header_parse(skb, sll->sll_addr);
  422. if (pskb_trim(skb, snaplen))
  423. goto drop_n_acct;
  424. skb_set_owner_r(skb, sk);
  425. skb->dev = NULL;
  426. dst_release(skb->dst);
  427. skb->dst = NULL;
  428. spin_lock(&sk->sk_receive_queue.lock);
  429. po->stats.tp_packets++;
  430. __skb_queue_tail(&sk->sk_receive_queue, skb);
  431. spin_unlock(&sk->sk_receive_queue.lock);
  432. sk->sk_data_ready(sk, skb->len);
  433. return 0;
  434. drop_n_acct:
  435. spin_lock(&sk->sk_receive_queue.lock);
  436. po->stats.tp_drops++;
  437. spin_unlock(&sk->sk_receive_queue.lock);
  438. drop_n_restore:
  439. if (skb_head != skb->data && skb_shared(skb)) {
  440. skb->data = skb_head;
  441. skb->len = skb_len;
  442. }
  443. drop:
  444. kfree_skb(skb);
  445. return 0;
  446. }
  447. #ifdef CONFIG_PACKET_MMAP
  448. static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
  449. {
  450. struct sock *sk;
  451. struct packet_sock *po;
  452. struct sockaddr_ll *sll;
  453. struct tpacket_hdr *h;
  454. u8 * skb_head = skb->data;
  455. int skb_len = skb->len;
  456. unsigned snaplen;
  457. unsigned long status = TP_STATUS_LOSING|TP_STATUS_USER;
  458. unsigned short macoff, netoff;
  459. struct sk_buff *copy_skb = NULL;
  460. if (skb->pkt_type == PACKET_LOOPBACK)
  461. goto drop;
  462. sk = pt->af_packet_priv;
  463. po = pkt_sk(sk);
  464. if (dev->hard_header) {
  465. if (sk->sk_type != SOCK_DGRAM)
  466. skb_push(skb, skb->data - skb->mac.raw);
  467. else if (skb->pkt_type == PACKET_OUTGOING) {
  468. /* Special case: outgoing packets have ll header at head */
  469. skb_pull(skb, skb->nh.raw - skb->data);
  470. if (skb->ip_summed == CHECKSUM_HW)
  471. status |= TP_STATUS_CSUMNOTREADY;
  472. }
  473. }
  474. snaplen = skb->len;
  475. if (sk->sk_filter) {
  476. unsigned res = run_filter(skb, sk, snaplen);
  477. if (res == 0)
  478. goto drop_n_restore;
  479. if (snaplen > res)
  480. snaplen = res;
  481. }
  482. if (sk->sk_type == SOCK_DGRAM) {
  483. macoff = netoff = TPACKET_ALIGN(TPACKET_HDRLEN) + 16;
  484. } else {
  485. unsigned maclen = skb->nh.raw - skb->data;
  486. netoff = TPACKET_ALIGN(TPACKET_HDRLEN + (maclen < 16 ? 16 : maclen));
  487. macoff = netoff - maclen;
  488. }
  489. if (macoff + snaplen > po->frame_size) {
  490. if (po->copy_thresh &&
  491. atomic_read(&sk->sk_rmem_alloc) + skb->truesize <
  492. (unsigned)sk->sk_rcvbuf) {
  493. if (skb_shared(skb)) {
  494. copy_skb = skb_clone(skb, GFP_ATOMIC);
  495. } else {
  496. copy_skb = skb_get(skb);
  497. skb_head = skb->data;
  498. }
  499. if (copy_skb)
  500. skb_set_owner_r(copy_skb, sk);
  501. }
  502. snaplen = po->frame_size - macoff;
  503. if ((int)snaplen < 0)
  504. snaplen = 0;
  505. }
  506. if (snaplen > skb->len-skb->data_len)
  507. snaplen = skb->len-skb->data_len;
  508. spin_lock(&sk->sk_receive_queue.lock);
  509. h = (struct tpacket_hdr *)packet_lookup_frame(po, po->head);
  510. if (h->tp_status)
  511. goto ring_is_full;
  512. po->head = po->head != po->frame_max ? po->head+1 : 0;
  513. po->stats.tp_packets++;
  514. if (copy_skb) {
  515. status |= TP_STATUS_COPY;
  516. __skb_queue_tail(&sk->sk_receive_queue, copy_skb);
  517. }
  518. if (!po->stats.tp_drops)
  519. status &= ~TP_STATUS_LOSING;
  520. spin_unlock(&sk->sk_receive_queue.lock);
  521. memcpy((u8*)h + macoff, skb->data, snaplen);
  522. h->tp_len = skb->len;
  523. h->tp_snaplen = snaplen;
  524. h->tp_mac = macoff;
  525. h->tp_net = netoff;
  526. if (skb->stamp.tv_sec == 0) {
  527. do_gettimeofday(&skb->stamp);
  528. sock_enable_timestamp(sk);
  529. }
  530. h->tp_sec = skb->stamp.tv_sec;
  531. h->tp_usec = skb->stamp.tv_usec;
  532. sll = (struct sockaddr_ll*)((u8*)h + TPACKET_ALIGN(sizeof(*h)));
  533. sll->sll_halen = 0;
  534. if (dev->hard_header_parse)
  535. sll->sll_halen = dev->hard_header_parse(skb, sll->sll_addr);
  536. sll->sll_family = AF_PACKET;
  537. sll->sll_hatype = dev->type;
  538. sll->sll_protocol = skb->protocol;
  539. sll->sll_pkttype = skb->pkt_type;
  540. sll->sll_ifindex = dev->ifindex;
  541. h->tp_status = status;
  542. mb();
  543. {
  544. struct page *p_start, *p_end;
  545. u8 *h_end = (u8 *)h + macoff + snaplen - 1;
  546. p_start = virt_to_page(h);
  547. p_end = virt_to_page(h_end);
  548. while (p_start <= p_end) {
  549. flush_dcache_page(p_start);
  550. p_start++;
  551. }
  552. }
  553. sk->sk_data_ready(sk, 0);
  554. drop_n_restore:
  555. if (skb_head != skb->data && skb_shared(skb)) {
  556. skb->data = skb_head;
  557. skb->len = skb_len;
  558. }
  559. drop:
  560. kfree_skb(skb);
  561. return 0;
  562. ring_is_full:
  563. po->stats.tp_drops++;
  564. spin_unlock(&sk->sk_receive_queue.lock);
  565. sk->sk_data_ready(sk, 0);
  566. if (copy_skb)
  567. kfree_skb(copy_skb);
  568. goto drop_n_restore;
  569. }
  570. #endif
  571. static int packet_sendmsg(struct kiocb *iocb, struct socket *sock,
  572. struct msghdr *msg, size_t len)
  573. {
  574. struct sock *sk = sock->sk;
  575. struct sockaddr_ll *saddr=(struct sockaddr_ll *)msg->msg_name;
  576. struct sk_buff *skb;
  577. struct net_device *dev;
  578. unsigned short proto;
  579. unsigned char *addr;
  580. int ifindex, err, reserve = 0;
  581. /*
  582. * Get and verify the address.
  583. */
  584. if (saddr == NULL) {
  585. struct packet_sock *po = pkt_sk(sk);
  586. ifindex = po->ifindex;
  587. proto = po->num;
  588. addr = NULL;
  589. } else {
  590. err = -EINVAL;
  591. if (msg->msg_namelen < sizeof(struct sockaddr_ll))
  592. goto out;
  593. ifindex = saddr->sll_ifindex;
  594. proto = saddr->sll_protocol;
  595. addr = saddr->sll_addr;
  596. }
  597. dev = dev_get_by_index(ifindex);
  598. err = -ENXIO;
  599. if (dev == NULL)
  600. goto out_unlock;
  601. if (sock->type == SOCK_RAW)
  602. reserve = dev->hard_header_len;
  603. err = -EMSGSIZE;
  604. if (len > dev->mtu+reserve)
  605. goto out_unlock;
  606. skb = sock_alloc_send_skb(sk, len + LL_RESERVED_SPACE(dev),
  607. msg->msg_flags & MSG_DONTWAIT, &err);
  608. if (skb==NULL)
  609. goto out_unlock;
  610. skb_reserve(skb, LL_RESERVED_SPACE(dev));
  611. skb->nh.raw = skb->data;
  612. if (dev->hard_header) {
  613. int res;
  614. err = -EINVAL;
  615. res = dev->hard_header(skb, dev, ntohs(proto), addr, NULL, len);
  616. if (sock->type != SOCK_DGRAM) {
  617. skb->tail = skb->data;
  618. skb->len = 0;
  619. } else if (res < 0)
  620. goto out_free;
  621. }
  622. /* Returns -EFAULT on error */
  623. err = memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len);
  624. if (err)
  625. goto out_free;
  626. skb->protocol = proto;
  627. skb->dev = dev;
  628. skb->priority = sk->sk_priority;
  629. err = -ENETDOWN;
  630. if (!(dev->flags & IFF_UP))
  631. goto out_free;
  632. /*
  633. * Now send it
  634. */
  635. err = dev_queue_xmit(skb);
  636. if (err > 0 && (err = net_xmit_errno(err)) != 0)
  637. goto out_unlock;
  638. dev_put(dev);
  639. return(len);
  640. out_free:
  641. kfree_skb(skb);
  642. out_unlock:
  643. if (dev)
  644. dev_put(dev);
  645. out:
  646. return err;
  647. }
  648. /*
  649. * Close a PACKET socket. This is fairly simple. We immediately go
  650. * to 'closed' state and remove our protocol entry in the device list.
  651. */
  652. static int packet_release(struct socket *sock)
  653. {
  654. struct sock *sk = sock->sk;
  655. struct packet_sock *po;
  656. if (!sk)
  657. return 0;
  658. po = pkt_sk(sk);
  659. write_lock_bh(&packet_sklist_lock);
  660. sk_del_node_init(sk);
  661. write_unlock_bh(&packet_sklist_lock);
  662. /*
  663. * Unhook packet receive handler.
  664. */
  665. if (po->running) {
  666. /*
  667. * Remove the protocol hook
  668. */
  669. dev_remove_pack(&po->prot_hook);
  670. po->running = 0;
  671. po->num = 0;
  672. __sock_put(sk);
  673. }
  674. #ifdef CONFIG_PACKET_MULTICAST
  675. packet_flush_mclist(sk);
  676. #endif
  677. #ifdef CONFIG_PACKET_MMAP
  678. if (po->pg_vec) {
  679. struct tpacket_req req;
  680. memset(&req, 0, sizeof(req));
  681. packet_set_ring(sk, &req, 1);
  682. }
  683. #endif
  684. /*
  685. * Now the socket is dead. No more input will appear.
  686. */
  687. sock_orphan(sk);
  688. sock->sk = NULL;
  689. /* Purge queues */
  690. skb_queue_purge(&sk->sk_receive_queue);
  691. sock_put(sk);
  692. return 0;
  693. }
  694. /*
  695. * Attach a packet hook.
  696. */
  697. static int packet_do_bind(struct sock *sk, struct net_device *dev, int protocol)
  698. {
  699. struct packet_sock *po = pkt_sk(sk);
  700. /*
  701. * Detach an existing hook if present.
  702. */
  703. lock_sock(sk);
  704. spin_lock(&po->bind_lock);
  705. if (po->running) {
  706. __sock_put(sk);
  707. po->running = 0;
  708. po->num = 0;
  709. spin_unlock(&po->bind_lock);
  710. dev_remove_pack(&po->prot_hook);
  711. spin_lock(&po->bind_lock);
  712. }
  713. po->num = protocol;
  714. po->prot_hook.type = protocol;
  715. po->prot_hook.dev = dev;
  716. po->ifindex = dev ? dev->ifindex : 0;
  717. if (protocol == 0)
  718. goto out_unlock;
  719. if (dev) {
  720. if (dev->flags&IFF_UP) {
  721. dev_add_pack(&po->prot_hook);
  722. sock_hold(sk);
  723. po->running = 1;
  724. } else {
  725. sk->sk_err = ENETDOWN;
  726. if (!sock_flag(sk, SOCK_DEAD))
  727. sk->sk_error_report(sk);
  728. }
  729. } else {
  730. dev_add_pack(&po->prot_hook);
  731. sock_hold(sk);
  732. po->running = 1;
  733. }
  734. out_unlock:
  735. spin_unlock(&po->bind_lock);
  736. release_sock(sk);
  737. return 0;
  738. }
  739. /*
  740. * Bind a packet socket to a device
  741. */
  742. #ifdef CONFIG_SOCK_PACKET
  743. static int packet_bind_spkt(struct socket *sock, struct sockaddr *uaddr, int addr_len)
  744. {
  745. struct sock *sk=sock->sk;
  746. char name[15];
  747. struct net_device *dev;
  748. int err = -ENODEV;
  749. /*
  750. * Check legality
  751. */
  752. if(addr_len!=sizeof(struct sockaddr))
  753. return -EINVAL;
  754. strlcpy(name,uaddr->sa_data,sizeof(name));
  755. dev = dev_get_by_name(name);
  756. if (dev) {
  757. err = packet_do_bind(sk, dev, pkt_sk(sk)->num);
  758. dev_put(dev);
  759. }
  760. return err;
  761. }
  762. #endif
  763. static int packet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
  764. {
  765. struct sockaddr_ll *sll = (struct sockaddr_ll*)uaddr;
  766. struct sock *sk=sock->sk;
  767. struct net_device *dev = NULL;
  768. int err;
  769. /*
  770. * Check legality
  771. */
  772. if (addr_len < sizeof(struct sockaddr_ll))
  773. return -EINVAL;
  774. if (sll->sll_family != AF_PACKET)
  775. return -EINVAL;
  776. if (sll->sll_ifindex) {
  777. err = -ENODEV;
  778. dev = dev_get_by_index(sll->sll_ifindex);
  779. if (dev == NULL)
  780. goto out;
  781. }
  782. err = packet_do_bind(sk, dev, sll->sll_protocol ? : pkt_sk(sk)->num);
  783. if (dev)
  784. dev_put(dev);
  785. out:
  786. return err;
  787. }
  788. static struct proto packet_proto = {
  789. .name = "PACKET",
  790. .owner = THIS_MODULE,
  791. .obj_size = sizeof(struct packet_sock),
  792. };
  793. /*
  794. * Create a packet of type SOCK_PACKET.
  795. */
  796. static int packet_create(struct socket *sock, int protocol)
  797. {
  798. struct sock *sk;
  799. struct packet_sock *po;
  800. int err;
  801. if (!capable(CAP_NET_RAW))
  802. return -EPERM;
  803. if (sock->type != SOCK_DGRAM && sock->type != SOCK_RAW
  804. #ifdef CONFIG_SOCK_PACKET
  805. && sock->type != SOCK_PACKET
  806. #endif
  807. )
  808. return -ESOCKTNOSUPPORT;
  809. sock->state = SS_UNCONNECTED;
  810. err = -ENOBUFS;
  811. sk = sk_alloc(PF_PACKET, GFP_KERNEL, &packet_proto, 1);
  812. if (sk == NULL)
  813. goto out;
  814. sock->ops = &packet_ops;
  815. #ifdef CONFIG_SOCK_PACKET
  816. if (sock->type == SOCK_PACKET)
  817. sock->ops = &packet_ops_spkt;
  818. #endif
  819. sock_init_data(sock, sk);
  820. po = pkt_sk(sk);
  821. sk->sk_family = PF_PACKET;
  822. po->num = protocol;
  823. sk->sk_destruct = packet_sock_destruct;
  824. atomic_inc(&packet_socks_nr);
  825. /*
  826. * Attach a protocol block
  827. */
  828. spin_lock_init(&po->bind_lock);
  829. po->prot_hook.func = packet_rcv;
  830. #ifdef CONFIG_SOCK_PACKET
  831. if (sock->type == SOCK_PACKET)
  832. po->prot_hook.func = packet_rcv_spkt;
  833. #endif
  834. po->prot_hook.af_packet_priv = sk;
  835. if (protocol) {
  836. po->prot_hook.type = protocol;
  837. dev_add_pack(&po->prot_hook);
  838. sock_hold(sk);
  839. po->running = 1;
  840. }
  841. write_lock_bh(&packet_sklist_lock);
  842. sk_add_node(sk, &packet_sklist);
  843. write_unlock_bh(&packet_sklist_lock);
  844. return(0);
  845. out:
  846. return err;
  847. }
  848. /*
  849. * Pull a packet from our receive queue and hand it to the user.
  850. * If necessary we block.
  851. */
  852. static int packet_recvmsg(struct kiocb *iocb, struct socket *sock,
  853. struct msghdr *msg, size_t len, int flags)
  854. {
  855. struct sock *sk = sock->sk;
  856. struct sk_buff *skb;
  857. int copied, err;
  858. err = -EINVAL;
  859. if (flags & ~(MSG_PEEK|MSG_DONTWAIT|MSG_TRUNC|MSG_CMSG_COMPAT))
  860. goto out;
  861. #if 0
  862. /* What error should we return now? EUNATTACH? */
  863. if (pkt_sk(sk)->ifindex < 0)
  864. return -ENODEV;
  865. #endif
  866. /*
  867. * If the address length field is there to be filled in, we fill
  868. * it in now.
  869. */
  870. if (sock->type == SOCK_PACKET)
  871. msg->msg_namelen = sizeof(struct sockaddr_pkt);
  872. else
  873. msg->msg_namelen = sizeof(struct sockaddr_ll);
  874. /*
  875. * Call the generic datagram receiver. This handles all sorts
  876. * of horrible races and re-entrancy so we can forget about it
  877. * in the protocol layers.
  878. *
  879. * Now it will return ENETDOWN, if device have just gone down,
  880. * but then it will block.
  881. */
  882. skb=skb_recv_datagram(sk,flags,flags&MSG_DONTWAIT,&err);
  883. /*
  884. * An error occurred so return it. Because skb_recv_datagram()
  885. * handles the blocking we don't see and worry about blocking
  886. * retries.
  887. */
  888. if(skb==NULL)
  889. goto out;
  890. /*
  891. * You lose any data beyond the buffer you gave. If it worries a
  892. * user program they can ask the device for its MTU anyway.
  893. */
  894. copied = skb->len;
  895. if (copied > len)
  896. {
  897. copied=len;
  898. msg->msg_flags|=MSG_TRUNC;
  899. }
  900. err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
  901. if (err)
  902. goto out_free;
  903. sock_recv_timestamp(msg, sk, skb);
  904. if (msg->msg_name)
  905. memcpy(msg->msg_name, skb->cb, msg->msg_namelen);
  906. /*
  907. * Free or return the buffer as appropriate. Again this
  908. * hides all the races and re-entrancy issues from us.
  909. */
  910. err = (flags&MSG_TRUNC) ? skb->len : copied;
  911. out_free:
  912. skb_free_datagram(sk, skb);
  913. out:
  914. return err;
  915. }
  916. #ifdef CONFIG_SOCK_PACKET
  917. static int packet_getname_spkt(struct socket *sock, struct sockaddr *uaddr,
  918. int *uaddr_len, int peer)
  919. {
  920. struct net_device *dev;
  921. struct sock *sk = sock->sk;
  922. if (peer)
  923. return -EOPNOTSUPP;
  924. uaddr->sa_family = AF_PACKET;
  925. dev = dev_get_by_index(pkt_sk(sk)->ifindex);
  926. if (dev) {
  927. strlcpy(uaddr->sa_data, dev->name, 15);
  928. dev_put(dev);
  929. } else
  930. memset(uaddr->sa_data, 0, 14);
  931. *uaddr_len = sizeof(*uaddr);
  932. return 0;
  933. }
  934. #endif
  935. static int packet_getname(struct socket *sock, struct sockaddr *uaddr,
  936. int *uaddr_len, int peer)
  937. {
  938. struct net_device *dev;
  939. struct sock *sk = sock->sk;
  940. struct packet_sock *po = pkt_sk(sk);
  941. struct sockaddr_ll *sll = (struct sockaddr_ll*)uaddr;
  942. if (peer)
  943. return -EOPNOTSUPP;
  944. sll->sll_family = AF_PACKET;
  945. sll->sll_ifindex = po->ifindex;
  946. sll->sll_protocol = po->num;
  947. dev = dev_get_by_index(po->ifindex);
  948. if (dev) {
  949. sll->sll_hatype = dev->type;
  950. sll->sll_halen = dev->addr_len;
  951. memcpy(sll->sll_addr, dev->dev_addr, dev->addr_len);
  952. dev_put(dev);
  953. } else {
  954. sll->sll_hatype = 0; /* Bad: we have no ARPHRD_UNSPEC */
  955. sll->sll_halen = 0;
  956. }
  957. *uaddr_len = sizeof(*sll);
  958. return 0;
  959. }
  960. #ifdef CONFIG_PACKET_MULTICAST
  961. static void packet_dev_mc(struct net_device *dev, struct packet_mclist *i, int what)
  962. {
  963. switch (i->type) {
  964. case PACKET_MR_MULTICAST:
  965. if (what > 0)
  966. dev_mc_add(dev, i->addr, i->alen, 0);
  967. else
  968. dev_mc_delete(dev, i->addr, i->alen, 0);
  969. break;
  970. case PACKET_MR_PROMISC:
  971. dev_set_promiscuity(dev, what);
  972. break;
  973. case PACKET_MR_ALLMULTI:
  974. dev_set_allmulti(dev, what);
  975. break;
  976. default:;
  977. }
  978. }
  979. static void packet_dev_mclist(struct net_device *dev, struct packet_mclist *i, int what)
  980. {
  981. for ( ; i; i=i->next) {
  982. if (i->ifindex == dev->ifindex)
  983. packet_dev_mc(dev, i, what);
  984. }
  985. }
  986. static int packet_mc_add(struct sock *sk, struct packet_mreq *mreq)
  987. {
  988. struct packet_sock *po = pkt_sk(sk);
  989. struct packet_mclist *ml, *i;
  990. struct net_device *dev;
  991. int err;
  992. rtnl_lock();
  993. err = -ENODEV;
  994. dev = __dev_get_by_index(mreq->mr_ifindex);
  995. if (!dev)
  996. goto done;
  997. err = -EINVAL;
  998. if (mreq->mr_alen > dev->addr_len)
  999. goto done;
  1000. err = -ENOBUFS;
  1001. i = (struct packet_mclist *)kmalloc(sizeof(*i), GFP_KERNEL);
  1002. if (i == NULL)
  1003. goto done;
  1004. err = 0;
  1005. for (ml = po->mclist; ml; ml = ml->next) {
  1006. if (ml->ifindex == mreq->mr_ifindex &&
  1007. ml->type == mreq->mr_type &&
  1008. ml->alen == mreq->mr_alen &&
  1009. memcmp(ml->addr, mreq->mr_address, ml->alen) == 0) {
  1010. ml->count++;
  1011. /* Free the new element ... */
  1012. kfree(i);
  1013. goto done;
  1014. }
  1015. }
  1016. i->type = mreq->mr_type;
  1017. i->ifindex = mreq->mr_ifindex;
  1018. i->alen = mreq->mr_alen;
  1019. memcpy(i->addr, mreq->mr_address, i->alen);
  1020. i->count = 1;
  1021. i->next = po->mclist;
  1022. po->mclist = i;
  1023. packet_dev_mc(dev, i, +1);
  1024. done:
  1025. rtnl_unlock();
  1026. return err;
  1027. }
  1028. static int packet_mc_drop(struct sock *sk, struct packet_mreq *mreq)
  1029. {
  1030. struct packet_mclist *ml, **mlp;
  1031. rtnl_lock();
  1032. for (mlp = &pkt_sk(sk)->mclist; (ml = *mlp) != NULL; mlp = &ml->next) {
  1033. if (ml->ifindex == mreq->mr_ifindex &&
  1034. ml->type == mreq->mr_type &&
  1035. ml->alen == mreq->mr_alen &&
  1036. memcmp(ml->addr, mreq->mr_address, ml->alen) == 0) {
  1037. if (--ml->count == 0) {
  1038. struct net_device *dev;
  1039. *mlp = ml->next;
  1040. dev = dev_get_by_index(ml->ifindex);
  1041. if (dev) {
  1042. packet_dev_mc(dev, ml, -1);
  1043. dev_put(dev);
  1044. }
  1045. kfree(ml);
  1046. }
  1047. rtnl_unlock();
  1048. return 0;
  1049. }
  1050. }
  1051. rtnl_unlock();
  1052. return -EADDRNOTAVAIL;
  1053. }
  1054. static void packet_flush_mclist(struct sock *sk)
  1055. {
  1056. struct packet_sock *po = pkt_sk(sk);
  1057. struct packet_mclist *ml;
  1058. if (!po->mclist)
  1059. return;
  1060. rtnl_lock();
  1061. while ((ml = po->mclist) != NULL) {
  1062. struct net_device *dev;
  1063. po->mclist = ml->next;
  1064. if ((dev = dev_get_by_index(ml->ifindex)) != NULL) {
  1065. packet_dev_mc(dev, ml, -1);
  1066. dev_put(dev);
  1067. }
  1068. kfree(ml);
  1069. }
  1070. rtnl_unlock();
  1071. }
  1072. #endif
  1073. static int
  1074. packet_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen)
  1075. {
  1076. struct sock *sk = sock->sk;
  1077. int ret;
  1078. if (level != SOL_PACKET)
  1079. return -ENOPROTOOPT;
  1080. switch(optname) {
  1081. #ifdef CONFIG_PACKET_MULTICAST
  1082. case PACKET_ADD_MEMBERSHIP:
  1083. case PACKET_DROP_MEMBERSHIP:
  1084. {
  1085. struct packet_mreq mreq;
  1086. if (optlen<sizeof(mreq))
  1087. return -EINVAL;
  1088. if (copy_from_user(&mreq,optval,sizeof(mreq)))
  1089. return -EFAULT;
  1090. if (optname == PACKET_ADD_MEMBERSHIP)
  1091. ret = packet_mc_add(sk, &mreq);
  1092. else
  1093. ret = packet_mc_drop(sk, &mreq);
  1094. return ret;
  1095. }
  1096. #endif
  1097. #ifdef CONFIG_PACKET_MMAP
  1098. case PACKET_RX_RING:
  1099. {
  1100. struct tpacket_req req;
  1101. if (optlen<sizeof(req))
  1102. return -EINVAL;
  1103. if (copy_from_user(&req,optval,sizeof(req)))
  1104. return -EFAULT;
  1105. return packet_set_ring(sk, &req, 0);
  1106. }
  1107. case PACKET_COPY_THRESH:
  1108. {
  1109. int val;
  1110. if (optlen!=sizeof(val))
  1111. return -EINVAL;
  1112. if (copy_from_user(&val,optval,sizeof(val)))
  1113. return -EFAULT;
  1114. pkt_sk(sk)->copy_thresh = val;
  1115. return 0;
  1116. }
  1117. #endif
  1118. default:
  1119. return -ENOPROTOOPT;
  1120. }
  1121. }
  1122. static int packet_getsockopt(struct socket *sock, int level, int optname,
  1123. char __user *optval, int __user *optlen)
  1124. {
  1125. int len;
  1126. struct sock *sk = sock->sk;
  1127. struct packet_sock *po = pkt_sk(sk);
  1128. if (level != SOL_PACKET)
  1129. return -ENOPROTOOPT;
  1130. if (get_user(len,optlen))
  1131. return -EFAULT;
  1132. if (len < 0)
  1133. return -EINVAL;
  1134. switch(optname) {
  1135. case PACKET_STATISTICS:
  1136. {
  1137. struct tpacket_stats st;
  1138. if (len > sizeof(struct tpacket_stats))
  1139. len = sizeof(struct tpacket_stats);
  1140. spin_lock_bh(&sk->sk_receive_queue.lock);
  1141. st = po->stats;
  1142. memset(&po->stats, 0, sizeof(st));
  1143. spin_unlock_bh(&sk->sk_receive_queue.lock);
  1144. st.tp_packets += st.tp_drops;
  1145. if (copy_to_user(optval, &st, len))
  1146. return -EFAULT;
  1147. break;
  1148. }
  1149. default:
  1150. return -ENOPROTOOPT;
  1151. }
  1152. if (put_user(len, optlen))
  1153. return -EFAULT;
  1154. return 0;
  1155. }
  1156. static int packet_notifier(struct notifier_block *this, unsigned long msg, void *data)
  1157. {
  1158. struct sock *sk;
  1159. struct hlist_node *node;
  1160. struct net_device *dev = (struct net_device*)data;
  1161. read_lock(&packet_sklist_lock);
  1162. sk_for_each(sk, node, &packet_sklist) {
  1163. struct packet_sock *po = pkt_sk(sk);
  1164. switch (msg) {
  1165. case NETDEV_UNREGISTER:
  1166. #ifdef CONFIG_PACKET_MULTICAST
  1167. if (po->mclist)
  1168. packet_dev_mclist(dev, po->mclist, -1);
  1169. // fallthrough
  1170. #endif
  1171. case NETDEV_DOWN:
  1172. if (dev->ifindex == po->ifindex) {
  1173. spin_lock(&po->bind_lock);
  1174. if (po->running) {
  1175. __dev_remove_pack(&po->prot_hook);
  1176. __sock_put(sk);
  1177. po->running = 0;
  1178. sk->sk_err = ENETDOWN;
  1179. if (!sock_flag(sk, SOCK_DEAD))
  1180. sk->sk_error_report(sk);
  1181. }
  1182. if (msg == NETDEV_UNREGISTER) {
  1183. po->ifindex = -1;
  1184. po->prot_hook.dev = NULL;
  1185. }
  1186. spin_unlock(&po->bind_lock);
  1187. }
  1188. break;
  1189. case NETDEV_UP:
  1190. spin_lock(&po->bind_lock);
  1191. if (dev->ifindex == po->ifindex && po->num &&
  1192. !po->running) {
  1193. dev_add_pack(&po->prot_hook);
  1194. sock_hold(sk);
  1195. po->running = 1;
  1196. }
  1197. spin_unlock(&po->bind_lock);
  1198. break;
  1199. }
  1200. }
  1201. read_unlock(&packet_sklist_lock);
  1202. return NOTIFY_DONE;
  1203. }
  1204. static int packet_ioctl(struct socket *sock, unsigned int cmd,
  1205. unsigned long arg)
  1206. {
  1207. struct sock *sk = sock->sk;
  1208. switch(cmd) {
  1209. case SIOCOUTQ:
  1210. {
  1211. int amount = atomic_read(&sk->sk_wmem_alloc);
  1212. return put_user(amount, (int __user *)arg);
  1213. }
  1214. case SIOCINQ:
  1215. {
  1216. struct sk_buff *skb;
  1217. int amount = 0;
  1218. spin_lock_bh(&sk->sk_receive_queue.lock);
  1219. skb = skb_peek(&sk->sk_receive_queue);
  1220. if (skb)
  1221. amount = skb->len;
  1222. spin_unlock_bh(&sk->sk_receive_queue.lock);
  1223. return put_user(amount, (int __user *)arg);
  1224. }
  1225. case SIOCGSTAMP:
  1226. return sock_get_timestamp(sk, (struct timeval __user *)arg);
  1227. #ifdef CONFIG_INET
  1228. case SIOCADDRT:
  1229. case SIOCDELRT:
  1230. case SIOCDARP:
  1231. case SIOCGARP:
  1232. case SIOCSARP:
  1233. case SIOCGIFADDR:
  1234. case SIOCSIFADDR:
  1235. case SIOCGIFBRDADDR:
  1236. case SIOCSIFBRDADDR:
  1237. case SIOCGIFNETMASK:
  1238. case SIOCSIFNETMASK:
  1239. case SIOCGIFDSTADDR:
  1240. case SIOCSIFDSTADDR:
  1241. case SIOCSIFFLAGS:
  1242. return inet_dgram_ops.ioctl(sock, cmd, arg);
  1243. #endif
  1244. default:
  1245. return dev_ioctl(cmd, (void __user *)arg);
  1246. }
  1247. return 0;
  1248. }
  1249. #ifndef CONFIG_PACKET_MMAP
  1250. #define packet_mmap sock_no_mmap
  1251. #define packet_poll datagram_poll
  1252. #else
  1253. static unsigned int packet_poll(struct file * file, struct socket *sock,
  1254. poll_table *wait)
  1255. {
  1256. struct sock *sk = sock->sk;
  1257. struct packet_sock *po = pkt_sk(sk);
  1258. unsigned int mask = datagram_poll(file, sock, wait);
  1259. spin_lock_bh(&sk->sk_receive_queue.lock);
  1260. if (po->pg_vec) {
  1261. unsigned last = po->head ? po->head-1 : po->frame_max;
  1262. struct tpacket_hdr *h;
  1263. h = (struct tpacket_hdr *)packet_lookup_frame(po, last);
  1264. if (h->tp_status)
  1265. mask |= POLLIN | POLLRDNORM;
  1266. }
  1267. spin_unlock_bh(&sk->sk_receive_queue.lock);
  1268. return mask;
  1269. }
  1270. /* Dirty? Well, I still did not learn better way to account
  1271. * for user mmaps.
  1272. */
  1273. static void packet_mm_open(struct vm_area_struct *vma)
  1274. {
  1275. struct file *file = vma->vm_file;
  1276. struct inode *inode = file->f_dentry->d_inode;
  1277. struct socket * sock = SOCKET_I(inode);
  1278. struct sock *sk = sock->sk;
  1279. if (sk)
  1280. atomic_inc(&pkt_sk(sk)->mapped);
  1281. }
  1282. static void packet_mm_close(struct vm_area_struct *vma)
  1283. {
  1284. struct file *file = vma->vm_file;
  1285. struct inode *inode = file->f_dentry->d_inode;
  1286. struct socket * sock = SOCKET_I(inode);
  1287. struct sock *sk = sock->sk;
  1288. if (sk)
  1289. atomic_dec(&pkt_sk(sk)->mapped);
  1290. }
  1291. static struct vm_operations_struct packet_mmap_ops = {
  1292. .open = packet_mm_open,
  1293. .close =packet_mm_close,
  1294. };
  1295. static inline struct page *pg_vec_endpage(char *one_pg_vec, unsigned int order)
  1296. {
  1297. return virt_to_page(one_pg_vec + (PAGE_SIZE << order) - 1);
  1298. }
  1299. static void free_pg_vec(char **pg_vec, unsigned order, unsigned len)
  1300. {
  1301. int i;
  1302. for (i=0; i<len; i++) {
  1303. if (pg_vec[i]) {
  1304. struct page *page, *pend;
  1305. pend = pg_vec_endpage(pg_vec[i], order);
  1306. for (page = virt_to_page(pg_vec[i]); page <= pend; page++)
  1307. ClearPageReserved(page);
  1308. free_pages((unsigned long)pg_vec[i], order);
  1309. }
  1310. }
  1311. kfree(pg_vec);
  1312. }
  1313. static int packet_set_ring(struct sock *sk, struct tpacket_req *req, int closing)
  1314. {
  1315. char **pg_vec = NULL;
  1316. struct packet_sock *po = pkt_sk(sk);
  1317. int was_running, num, order = 0;
  1318. int err = 0;
  1319. if (req->tp_block_nr) {
  1320. int i, l;
  1321. /* Sanity tests and some calculations */
  1322. if (po->pg_vec)
  1323. return -EBUSY;
  1324. if ((int)req->tp_block_size <= 0)
  1325. return -EINVAL;
  1326. if (req->tp_block_size&(PAGE_SIZE-1))
  1327. return -EINVAL;
  1328. if (req->tp_frame_size < TPACKET_HDRLEN)
  1329. return -EINVAL;
  1330. if (req->tp_frame_size&(TPACKET_ALIGNMENT-1))
  1331. return -EINVAL;
  1332. po->frames_per_block = req->tp_block_size/req->tp_frame_size;
  1333. if (po->frames_per_block <= 0)
  1334. return -EINVAL;
  1335. if (po->frames_per_block*req->tp_block_nr != req->tp_frame_nr)
  1336. return -EINVAL;
  1337. /* OK! */
  1338. /* Allocate page vector */
  1339. while ((PAGE_SIZE<<order) < req->tp_block_size)
  1340. order++;
  1341. err = -ENOMEM;
  1342. pg_vec = kmalloc(req->tp_block_nr*sizeof(char *), GFP_KERNEL);
  1343. if (pg_vec == NULL)
  1344. goto out;
  1345. memset(pg_vec, 0, req->tp_block_nr*sizeof(char **));
  1346. for (i=0; i<req->tp_block_nr; i++) {
  1347. struct page *page, *pend;
  1348. pg_vec[i] = (char *)__get_free_pages(GFP_KERNEL, order);
  1349. if (!pg_vec[i])
  1350. goto out_free_pgvec;
  1351. pend = pg_vec_endpage(pg_vec[i], order);
  1352. for (page = virt_to_page(pg_vec[i]); page <= pend; page++)
  1353. SetPageReserved(page);
  1354. }
  1355. /* Page vector is allocated */
  1356. l = 0;
  1357. for (i=0; i<req->tp_block_nr; i++) {
  1358. char *ptr = pg_vec[i];
  1359. struct tpacket_hdr *header;
  1360. int k;
  1361. for (k=0; k<po->frames_per_block; k++) {
  1362. header = (struct tpacket_hdr*)ptr;
  1363. header->tp_status = TP_STATUS_KERNEL;
  1364. ptr += req->tp_frame_size;
  1365. }
  1366. }
  1367. /* Done */
  1368. } else {
  1369. if (req->tp_frame_nr)
  1370. return -EINVAL;
  1371. }
  1372. lock_sock(sk);
  1373. /* Detach socket from network */
  1374. spin_lock(&po->bind_lock);
  1375. was_running = po->running;
  1376. num = po->num;
  1377. if (was_running) {
  1378. __dev_remove_pack(&po->prot_hook);
  1379. po->num = 0;
  1380. po->running = 0;
  1381. __sock_put(sk);
  1382. }
  1383. spin_unlock(&po->bind_lock);
  1384. synchronize_net();
  1385. err = -EBUSY;
  1386. if (closing || atomic_read(&po->mapped) == 0) {
  1387. err = 0;
  1388. #define XC(a, b) ({ __typeof__ ((a)) __t; __t = (a); (a) = (b); __t; })
  1389. spin_lock_bh(&sk->sk_receive_queue.lock);
  1390. pg_vec = XC(po->pg_vec, pg_vec);
  1391. po->frame_max = req->tp_frame_nr-1;
  1392. po->head = 0;
  1393. po->frame_size = req->tp_frame_size;
  1394. spin_unlock_bh(&sk->sk_receive_queue.lock);
  1395. order = XC(po->pg_vec_order, order);
  1396. req->tp_block_nr = XC(po->pg_vec_len, req->tp_block_nr);
  1397. po->pg_vec_pages = req->tp_block_size/PAGE_SIZE;
  1398. po->prot_hook.func = po->pg_vec ? tpacket_rcv : packet_rcv;
  1399. skb_queue_purge(&sk->sk_receive_queue);
  1400. #undef XC
  1401. if (atomic_read(&po->mapped))
  1402. printk(KERN_DEBUG "packet_mmap: vma is busy: %d\n", atomic_read(&po->mapped));
  1403. }
  1404. spin_lock(&po->bind_lock);
  1405. if (was_running && !po->running) {
  1406. sock_hold(sk);
  1407. po->running = 1;
  1408. po->num = num;
  1409. dev_add_pack(&po->prot_hook);
  1410. }
  1411. spin_unlock(&po->bind_lock);
  1412. release_sock(sk);
  1413. out_free_pgvec:
  1414. if (pg_vec)
  1415. free_pg_vec(pg_vec, order, req->tp_block_nr);
  1416. out:
  1417. return err;
  1418. }
  1419. static int packet_mmap(struct file *file, struct socket *sock, struct vm_area_struct *vma)
  1420. {
  1421. struct sock *sk = sock->sk;
  1422. struct packet_sock *po = pkt_sk(sk);
  1423. unsigned long size;
  1424. unsigned long start;
  1425. int err = -EINVAL;
  1426. int i;
  1427. if (vma->vm_pgoff)
  1428. return -EINVAL;
  1429. size = vma->vm_end - vma->vm_start;
  1430. lock_sock(sk);
  1431. if (po->pg_vec == NULL)
  1432. goto out;
  1433. if (size != po->pg_vec_len*po->pg_vec_pages*PAGE_SIZE)
  1434. goto out;
  1435. atomic_inc(&po->mapped);
  1436. start = vma->vm_start;
  1437. err = -EAGAIN;
  1438. for (i=0; i<po->pg_vec_len; i++) {
  1439. if (remap_pfn_range(vma, start,
  1440. __pa(po->pg_vec[i]) >> PAGE_SHIFT,
  1441. po->pg_vec_pages*PAGE_SIZE,
  1442. vma->vm_page_prot))
  1443. goto out;
  1444. start += po->pg_vec_pages*PAGE_SIZE;
  1445. }
  1446. vma->vm_ops = &packet_mmap_ops;
  1447. err = 0;
  1448. out:
  1449. release_sock(sk);
  1450. return err;
  1451. }
  1452. #endif
  1453. #ifdef CONFIG_SOCK_PACKET
  1454. static struct proto_ops packet_ops_spkt = {
  1455. .family = PF_PACKET,
  1456. .owner = THIS_MODULE,
  1457. .release = packet_release,
  1458. .bind = packet_bind_spkt,
  1459. .connect = sock_no_connect,
  1460. .socketpair = sock_no_socketpair,
  1461. .accept = sock_no_accept,
  1462. .getname = packet_getname_spkt,
  1463. .poll = datagram_poll,
  1464. .ioctl = packet_ioctl,
  1465. .listen = sock_no_listen,
  1466. .shutdown = sock_no_shutdown,
  1467. .setsockopt = sock_no_setsockopt,
  1468. .getsockopt = sock_no_getsockopt,
  1469. .sendmsg = packet_sendmsg_spkt,
  1470. .recvmsg = packet_recvmsg,
  1471. .mmap = sock_no_mmap,
  1472. .sendpage = sock_no_sendpage,
  1473. };
  1474. #endif
  1475. static struct proto_ops packet_ops = {
  1476. .family = PF_PACKET,
  1477. .owner = THIS_MODULE,
  1478. .release = packet_release,
  1479. .bind = packet_bind,
  1480. .connect = sock_no_connect,
  1481. .socketpair = sock_no_socketpair,
  1482. .accept = sock_no_accept,
  1483. .getname = packet_getname,
  1484. .poll = packet_poll,
  1485. .ioctl = packet_ioctl,
  1486. .listen = sock_no_listen,
  1487. .shutdown = sock_no_shutdown,
  1488. .setsockopt = packet_setsockopt,
  1489. .getsockopt = packet_getsockopt,
  1490. .sendmsg = packet_sendmsg,
  1491. .recvmsg = packet_recvmsg,
  1492. .mmap = packet_mmap,
  1493. .sendpage = sock_no_sendpage,
  1494. };
  1495. static struct net_proto_family packet_family_ops = {
  1496. .family = PF_PACKET,
  1497. .create = packet_create,
  1498. .owner = THIS_MODULE,
  1499. };
  1500. static struct notifier_block packet_netdev_notifier = {
  1501. .notifier_call =packet_notifier,
  1502. };
  1503. #ifdef CONFIG_PROC_FS
  1504. static inline struct sock *packet_seq_idx(loff_t off)
  1505. {
  1506. struct sock *s;
  1507. struct hlist_node *node;
  1508. sk_for_each(s, node, &packet_sklist) {
  1509. if (!off--)
  1510. return s;
  1511. }
  1512. return NULL;
  1513. }
  1514. static void *packet_seq_start(struct seq_file *seq, loff_t *pos)
  1515. {
  1516. read_lock(&packet_sklist_lock);
  1517. return *pos ? packet_seq_idx(*pos - 1) : SEQ_START_TOKEN;
  1518. }
  1519. static void *packet_seq_next(struct seq_file *seq, void *v, loff_t *pos)
  1520. {
  1521. ++*pos;
  1522. return (v == SEQ_START_TOKEN)
  1523. ? sk_head(&packet_sklist)
  1524. : sk_next((struct sock*)v) ;
  1525. }
  1526. static void packet_seq_stop(struct seq_file *seq, void *v)
  1527. {
  1528. read_unlock(&packet_sklist_lock);
  1529. }
  1530. static int packet_seq_show(struct seq_file *seq, void *v)
  1531. {
  1532. if (v == SEQ_START_TOKEN)
  1533. seq_puts(seq, "sk RefCnt Type Proto Iface R Rmem User Inode\n");
  1534. else {
  1535. struct sock *s = v;
  1536. const struct packet_sock *po = pkt_sk(s);
  1537. seq_printf(seq,
  1538. "%p %-6d %-4d %04x %-5d %1d %-6u %-6u %-6lu\n",
  1539. s,
  1540. atomic_read(&s->sk_refcnt),
  1541. s->sk_type,
  1542. ntohs(po->num),
  1543. po->ifindex,
  1544. po->running,
  1545. atomic_read(&s->sk_rmem_alloc),
  1546. sock_i_uid(s),
  1547. sock_i_ino(s) );
  1548. }
  1549. return 0;
  1550. }
  1551. static struct seq_operations packet_seq_ops = {
  1552. .start = packet_seq_start,
  1553. .next = packet_seq_next,
  1554. .stop = packet_seq_stop,
  1555. .show = packet_seq_show,
  1556. };
  1557. static int packet_seq_open(struct inode *inode, struct file *file)
  1558. {
  1559. return seq_open(file, &packet_seq_ops);
  1560. }
  1561. static struct file_operations packet_seq_fops = {
  1562. .owner = THIS_MODULE,
  1563. .open = packet_seq_open,
  1564. .read = seq_read,
  1565. .llseek = seq_lseek,
  1566. .release = seq_release,
  1567. };
  1568. #endif
  1569. static void __exit packet_exit(void)
  1570. {
  1571. proc_net_remove("packet");
  1572. unregister_netdevice_notifier(&packet_netdev_notifier);
  1573. sock_unregister(PF_PACKET);
  1574. proto_unregister(&packet_proto);
  1575. }
  1576. static int __init packet_init(void)
  1577. {
  1578. int rc = proto_register(&packet_proto, 0);
  1579. if (rc != 0)
  1580. goto out;
  1581. sock_register(&packet_family_ops);
  1582. register_netdevice_notifier(&packet_netdev_notifier);
  1583. proc_net_fops_create("packet", 0, &packet_seq_fops);
  1584. out:
  1585. return rc;
  1586. }
  1587. module_init(packet_init);
  1588. module_exit(packet_exit);
  1589. MODULE_LICENSE("GPL");
  1590. MODULE_ALIAS_NETPROTO(PF_PACKET);