Guest User

Untitled

a guest
Dec 12th, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. void kfree(void *p) {
  2. free(p);
  3. }
  4.  
  5. struct spin_lock {
  6. int a;
  7. };
  8.  
  9. #define ldv_assert(b) if(!(b)) __VERIFIER_error()
  10.  
  11. static int spin_lock = 1;
  12.  
  13. void ldv_spin_lock(struct spin_lock *lock)
  14. {
  15. ldv_assert(spin_lock == 1);
  16. spin_lock = 2;
  17. }
  18.  
  19. void spin_unlock(struct spin_lock *lock) {
  20. ldv_assert(spin_lock == 2);
  21. spin_lock = 1;
  22. }
  23.  
  24. struct lirq {
  25. int index;
  26. unsigned int irq;
  27. };
  28.  
  29. #define MAX 32
  30.  
  31. struct priv {
  32. struct spin_lock lock;
  33. int ngpio;
  34. unsigned long imask;
  35. struct lirq lirqs[MAX];
  36. };
  37.  
  38. unsigned long get_mask(struct priv *priv, unsigned int offset);
  39.  
  40. static void grgpio_set_imask(struct priv *priv, unsigned int offset,
  41. int val)
  42. {
  43. unsigned long mask = get_mask(priv, offset);
  44.  
  45. //security: double lock occurs on all paths
  46. ldv_spin_lock(&priv->lock);
  47.  
  48. if (val)
  49. priv->imask |= mask;
  50. else
  51. priv->imask &= ~mask;
  52.  
  53. spin_unlock(&priv->lock);
  54. }
  55.  
  56. static void irq_unmap(struct priv *priv, unsigned int irq)
  57. {
  58. int index;
  59. int i;
  60. struct lirq *lirq;
  61. int ngpio = priv->ngpio;
  62. int k = 2;
  63.  
  64. ldv_spin_lock(&priv->lock);
  65. /* Free underlying irq if last user unmapped */
  66. index = -1;
  67. for (i = 0; k < ngpio; i++) {
  68. lirq = &priv->lirqs[i];
  69. if (lirq->irq == irq) {
  70. grgpio_set_imask(priv, i, 0);
  71. index = lirq->index;
  72. break;
  73. }
  74. }
  75. spin_unlock(&priv->lock);
  76. }
  77.  
  78. struct priv *get_priv(void);
  79. unsigned int get_irq(void);
  80.  
  81. void main(void) {
  82. struct priv *priv = get_priv();
  83. unsigned int irq = get_irq();
  84. irq_unmap(priv, irq);
  85. }
Add Comment
Please, Sign In to add comment