1 // SPDX-License-Identifier: GPL-2.0-only 2 #include <linux/kdebug.h> 3 #include <linux/kprobes.h> 4 #include <linux/export.h> 5 #include <linux/notifier.h> 6 #include <linux/rcupdate.h> 7 #include <linux/vmalloc.h> 8 #include <linux/reboot.h> 9 10 /* 11 * Notifier list for kernel code which wants to be called 12 * at shutdown. This is used to stop any idling DMA operations 13 * and the like. 14 */ 15 BLOCKING_NOTIFIER_HEAD(reboot_notifier_list); 16 17 /* 18 * Notifier chain core routines. The exported routines below 19 * are layered on top of these, with appropriate locking added. 20 */ 21 22 static int notifier_chain_register(struct notifier_block **nl, 23 struct notifier_block *n) 24 { 25 while ((*nl) != NULL) { 26 if (unlikely((*nl) == n)) { 27 WARN(1, "double register detected"); 28 return 0; 29 } 30 if (n->priority > (*nl)->priority) 31 break; 32 nl = &((*nl)->next); 33 } 34 n->next = *nl; 35 rcu_assign_pointer(*nl, n); 36 return 0; 37 } 38 39 static int notifier_chain_unregister(struct notifier_block **nl, 40 struct notifier_block *n) 41 { 42 while ((*nl) != NULL) { 43 if ((*nl) == n) { 44 rcu_assign_pointer(*nl, n->next); 45 return 0; 46 } 47 nl = &((*nl)->next); 48 } 49 return -ENOENT; 50 } 51 52 /** 53 * notifier_call_chain - Informs the registered notifiers about an event. 54 * @nl: Pointer to head of the blocking notifier chain 55 * @val: Value passed unmodified to notifier function 56 * @v: Pointer passed unmodified to notifier function 57 * @nr_to_call: Number of notifier functions to be called. Don't care 58 * value of this parameter is -1. 59 * @nr_calls: Records the number of notifications sent. Don't care 60 * value of this field is NULL. 61 * @returns: notifier_call_chain returns the value returned by the 62 * last notifier function called. 63 */ 64 static int notifier_call_chain(struct notifier_block **nl, 65 unsigned long val, void *v, 66 int nr_to_call, int *nr_calls) 67 { 68 int ret = NOTIFY_DONE; 69 struct notifier_block *nb, *next_nb; 70 71 nb = rcu_dereference_raw(*nl); 72 73 while (nb && nr_to_call) { 74 next_nb = rcu_dereference_raw(nb->next); 75 76 #ifdef CONFIG_DEBUG_NOTIFIERS 77 if (unlikely(!func_ptr_is_kernel_text(nb->notifier_call))) { 78 WARN(1, "Invalid notifier called!"); 79 nb = next_nb; 80 continue; 81 } 82 #endif 83 ret = nb->notifier_call(nb, val, v); 84 85 if (nr_calls) 86 (*nr_calls)++; 87 88 if (ret & NOTIFY_STOP_MASK) 89 break; 90 nb = next_nb; 91 nr_to_call--; 92 } 93 return ret; 94 } 95 NOKPROBE_SYMBOL(notifier_call_chain); 96 97 /* 98 * Atomic notifier chain routines. Registration and unregistration 99 * use a spinlock, and call_chain is synchronized by RCU (no locks). 100 */ 101 102 /** 103 * atomic_notifier_chain_register - Add notifier to an atomic notifier chain 104 * @nh: Pointer to head of the atomic notifier chain 105 * @n: New entry in notifier chain 106 * 107 * Adds a notifier to an atomic notifier chain. 108 * 109 * Currently always returns zero. 110 */ 111 int atomic_notifier_chain_register(struct atomic_notifier_head *nh, 112 struct notifier_block *n) 113 { 114 unsigned long flags; 115 int ret; 116 117 spin_lock_irqsave(&nh->lock, flags); 118 ret = notifier_chain_register(&nh->head, n); 119 spin_unlock_irqrestore(&nh->lock, flags); 120 return ret; 121 } 122 EXPORT_SYMBOL_GPL(atomic_notifier_chain_register); 123 124 /** 125 * atomic_notifier_chain_unregister - Remove notifier from an atomic notifier chain 126 * @nh: Pointer to head of the atomic notifier chain 127 * @n: Entry to remove from notifier chain 128 * 129 * Removes a notifier from an atomic notifier chain. 130 * 131 * Returns zero on success or %-ENOENT on failure. 132 */ 133 int atomic_notifier_chain_unregister(struct atomic_notifier_head *nh, 134 struct notifier_block *n) 135 { 136 unsigned long flags; 137 int ret; 138 139 spin_lock_irqsave(&nh->lock, flags); 140 ret = notifier_chain_unregister(&nh->head, n); 141 spin_unlock_irqrestore(&nh->lock, flags); 142 synchronize_rcu(); 143 return ret; 144 } 145 EXPORT_SYMBOL_GPL(atomic_notifier_chain_unregister); 146 147 /** 148 * __atomic_notifier_call_chain - Call functions in an atomic notifier chain 149 * @nh: Pointer to head of the atomic notifier chain 150 * @val: Value passed unmodified to notifier function 151 * @v: Pointer passed unmodified to notifier function 152 * @nr_to_call: See the comment for notifier_call_chain. 153 * @nr_calls: See the comment for notifier_call_chain. 154 * 155 * Calls each function in a notifier chain in turn. The functions 156 * run in an atomic context, so they must not block. 157 * This routine uses RCU to synchronize with changes to the chain. 158 * 159 * If the return value of the notifier can be and'ed 160 * with %NOTIFY_STOP_MASK then atomic_notifier_call_chain() 161 * will return immediately, with the return value of 162 * the notifier function which halted execution. 163 * Otherwise the return value is the return value 164 * of the last notifier function called. 165 */ 166 int __atomic_notifier_call_chain(struct atomic_notifier_head *nh, 167 unsigned long val, void *v, 168 int nr_to_call, int *nr_calls) 169 { 170 int ret; 171 172 rcu_read_lock(); 173 ret = notifier_call_chain(&nh->head, val, v, nr_to_call, nr_calls); 174 rcu_read_unlock(); 175 return ret; 176 } 177 EXPORT_SYMBOL_GPL(__atomic_notifier_call_chain); 178 NOKPROBE_SYMBOL(__atomic_notifier_call_chain); 179 180 int atomic_notifier_call_chain(struct atomic_notifier_head *nh, 181 unsigned long val, void *v) 182 { 183 return __atomic_notifier_call_chain(nh, val, v, -1, NULL); 184 } 185 EXPORT_SYMBOL_GPL(atomic_notifier_call_chain); 186 NOKPROBE_SYMBOL(atomic_notifier_call_chain); 187 188 /* 189 * Blocking notifier chain routines. All access to the chain is 190 * synchronized by an rwsem. 191 */ 192 193 /** 194 * blocking_notifier_chain_register - Add notifier to a blocking notifier chain 195 * @nh: Pointer to head of the blocking notifier chain 196 * @n: New entry in notifier chain 197 * 198 * Adds a notifier to a blocking notifier chain. 199 * Must be called in process context. 200 * 201 * Currently always returns zero. 202 */ 203 int blocking_notifier_chain_register(struct blocking_notifier_head *nh, 204 struct notifier_block *n) 205 { 206 int ret; 207 208 /* 209 * This code gets used during boot-up, when task switching is 210 * not yet working and interrupts must remain disabled. At 211 * such times we must not call down_write(). 212 */ 213 if (unlikely(system_state == SYSTEM_BOOTING)) 214 return notifier_chain_register(&nh->head, n); 215 216 down_write(&nh->rwsem); 217 ret = notifier_chain_register(&nh->head, n); 218 up_write(&nh->rwsem); 219 return ret; 220 } 221 EXPORT_SYMBOL_GPL(blocking_notifier_chain_register); 222 223 /** 224 * blocking_notifier_chain_cond_register - Cond add notifier to a blocking notifier chain 225 * @nh: Pointer to head of the blocking notifier chain 226 * @n: New entry in notifier chain 227 * 228 * Adds a notifier to a blocking notifier chain, only if not already 229 * present in the chain. 230 * Must be called in process context. 231 * 232 * Currently always returns zero. 233 */ 234 int blocking_notifier_chain_cond_register(struct blocking_notifier_head *nh, 235 struct notifier_block *n) 236 { 237 int ret; 238 239 down_write(&nh->rwsem); 240 ret = notifier_chain_register(&nh->head, n); 241 up_write(&nh->rwsem); 242 return ret; 243 } 244 EXPORT_SYMBOL_GPL(blocking_notifier_chain_cond_register); 245 246 /** 247 * blocking_notifier_chain_unregister - Remove notifier from a blocking notifier chain 248 * @nh: Pointer to head of the blocking notifier chain 249 * @n: Entry to remove from notifier chain 250 * 251 * Removes a notifier from a blocking notifier chain. 252 * Must be called from process context. 253 * 254 * Returns zero on success or %-ENOENT on failure. 255 */ 256 int blocking_notifier_chain_unregister(struct blocking_notifier_head *nh, 257 struct notifier_block *n) 258 { 259 int ret; 260 261 /* 262 * This code gets used during boot-up, when task switching is 263 * not yet working and interrupts must remain disabled. At 264 * such times we must not call down_write(). 265 */ 266 if (unlikely(system_state == SYSTEM_BOOTING)) 267 return notifier_chain_unregister(&nh->head, n); 268 269 down_write(&nh->rwsem); 270 ret = notifier_chain_unregister(&nh->head, n); 271 up_write(&nh->rwsem); 272 return ret; 273 } 274 EXPORT_SYMBOL_GPL(blocking_notifier_chain_unregister); 275 276 /** 277 * __blocking_notifier_call_chain - Call functions in a blocking notifier chain 278 * @nh: Pointer to head of the blocking notifier chain 279 * @val: Value passed unmodified to notifier function 280 * @v: Pointer passed unmodified to notifier function 281 * @nr_to_call: See comment for notifier_call_chain. 282 * @nr_calls: See comment for notifier_call_chain. 283 * 284 * Calls each function in a notifier chain in turn. The functions 285 * run in a process context, so they are allowed to block. 286 * 287 * If the return value of the notifier can be and'ed 288 * with %NOTIFY_STOP_MASK then blocking_notifier_call_chain() 289 * will return immediately, with the return value of 290 * the notifier function which halted execution. 291 * Otherwise the return value is the return value 292 * of the last notifier function called. 293 */ 294 int __blocking_notifier_call_chain(struct blocking_notifier_head *nh, 295 unsigned long val, void *v, 296 int nr_to_call, int *nr_calls) 297 { 298 int ret = NOTIFY_DONE; 299 300 /* 301 * We check the head outside the lock, but if this access is 302 * racy then it does not matter what the result of the test 303 * is, we re-check the list after having taken the lock anyway: 304 */ 305 if (rcu_access_pointer(nh->head)) { 306 down_read(&nh->rwsem); 307 ret = notifier_call_chain(&nh->head, val, v, nr_to_call, 308 nr_calls); 309 up_read(&nh->rwsem); 310 } 311 return ret; 312 } 313 EXPORT_SYMBOL_GPL(__blocking_notifier_call_chain); 314 315 int blocking_notifier_call_chain(struct blocking_notifier_head *nh, 316 unsigned long val, void *v) 317 { 318 return __blocking_notifier_call_chain(nh, val, v, -1, NULL); 319 } 320 EXPORT_SYMBOL_GPL(blocking_notifier_call_chain); 321 322 /* 323 * Raw notifier chain routines. There is no protection; 324 * the caller must provide it. Use at your own risk! 325 */ 326 327 /** 328 * raw_notifier_chain_register - Add notifier to a raw notifier chain 329 * @nh: Pointer to head of the raw notifier chain 330 * @n: New entry in notifier chain 331 * 332 * Adds a notifier to a raw notifier chain. 333 * All locking must be provided by the caller. 334 * 335 * Currently always returns zero. 336 */ 337 int raw_notifier_chain_register(struct raw_notifier_head *nh, 338 struct notifier_block *n) 339 { 340 return notifier_chain_register(&nh->head, n); 341 } 342 EXPORT_SYMBOL_GPL(raw_notifier_chain_register); 343 344 /** 345 * raw_notifier_chain_unregister - Remove notifier from a raw notifier chain 346 * @nh: Pointer to head of the raw notifier chain 347 * @n: Entry to remove from notifier chain 348 * 349 * Removes a notifier from a raw notifier chain. 350 * All locking must be provided by the caller. 351 * 352 * Returns zero on success or %-ENOENT on failure. 353 */ 354 int raw_notifier_chain_unregister(struct raw_notifier_head *nh, 355 struct notifier_block *n) 356 { 357 return notifier_chain_unregister(&nh->head, n); 358 } 359 EXPORT_SYMBOL_GPL(raw_notifier_chain_unregister); 360 361 /** 362 * __raw_notifier_call_chain - Call functions in a raw notifier chain 363 * @nh: Pointer to head of the raw notifier chain 364 * @val: Value passed unmodified to notifier function 365 * @v: Pointer passed unmodified to notifier function 366 * @nr_to_call: See comment for notifier_call_chain. 367 * @nr_calls: See comment for notifier_call_chain 368 * 369 * Calls each function in a notifier chain in turn. The functions 370 * run in an undefined context. 371 * All locking must be provided by the caller. 372 * 373 * If the return value of the notifier can be and'ed 374 * with %NOTIFY_STOP_MASK then raw_notifier_call_chain() 375 * will return immediately, with the return value of 376 * the notifier function which halted execution. 377 * Otherwise the return value is the return value 378 * of the last notifier function called. 379 */ 380 int __raw_notifier_call_chain(struct raw_notifier_head *nh, 381 unsigned long val, void *v, 382 int nr_to_call, int *nr_calls) 383 { 384 return notifier_call_chain(&nh->head, val, v, nr_to_call, nr_calls); 385 } 386 EXPORT_SYMBOL_GPL(__raw_notifier_call_chain); 387 388 int raw_notifier_call_chain(struct raw_notifier_head *nh, 389 unsigned long val, void *v) 390 { 391 return __raw_notifier_call_chain(nh, val, v, -1, NULL); 392 } 393 EXPORT_SYMBOL_GPL(raw_notifier_call_chain); 394 395 #ifdef CONFIG_SRCU 396 /* 397 * SRCU notifier chain routines. Registration and unregistration 398 * use a mutex, and call_chain is synchronized by SRCU (no locks). 399 */ 400 401 /** 402 * srcu_notifier_chain_register - Add notifier to an SRCU notifier chain 403 * @nh: Pointer to head of the SRCU notifier chain 404 * @n: New entry in notifier chain 405 * 406 * Adds a notifier to an SRCU notifier chain. 407 * Must be called in process context. 408 * 409 * Currently always returns zero. 410 */ 411 int srcu_notifier_chain_register(struct srcu_notifier_head *nh, 412 struct notifier_block *n) 413 { 414 int ret; 415 416 /* 417 * This code gets used during boot-up, when task switching is 418 * not yet working and interrupts must remain disabled. At 419 * such times we must not call mutex_lock(). 420 */ 421 if (unlikely(system_state == SYSTEM_BOOTING)) 422 return notifier_chain_register(&nh->head, n); 423 424 mutex_lock(&nh->mutex); 425 ret = notifier_chain_register(&nh->head, n); 426 mutex_unlock(&nh->mutex); 427 return ret; 428 } 429 EXPORT_SYMBOL_GPL(srcu_notifier_chain_register); 430 431 /** 432 * srcu_notifier_chain_unregister - Remove notifier from an SRCU notifier chain 433 * @nh: Pointer to head of the SRCU notifier chain 434 * @n: Entry to remove from notifier chain 435 * 436 * Removes a notifier from an SRCU notifier chain. 437 * Must be called from process context. 438 * 439 * Returns zero on success or %-ENOENT on failure. 440 */ 441 int srcu_notifier_chain_unregister(struct srcu_notifier_head *nh, 442 struct notifier_block *n) 443 { 444 int ret; 445 446 /* 447 * This code gets used during boot-up, when task switching is 448 * not yet working and interrupts must remain disabled. At 449 * such times we must not call mutex_lock(). 450 */ 451 if (unlikely(system_state == SYSTEM_BOOTING)) 452 return notifier_chain_unregister(&nh->head, n); 453 454 mutex_lock(&nh->mutex); 455 ret = notifier_chain_unregister(&nh->head, n); 456 mutex_unlock(&nh->mutex); 457 synchronize_srcu(&nh->srcu); 458 return ret; 459 } 460 EXPORT_SYMBOL_GPL(srcu_notifier_chain_unregister); 461 462 /** 463 * __srcu_notifier_call_chain - Call functions in an SRCU notifier chain 464 * @nh: Pointer to head of the SRCU notifier chain 465 * @val: Value passed unmodified to notifier function 466 * @v: Pointer passed unmodified to notifier function 467 * @nr_to_call: See comment for notifier_call_chain. 468 * @nr_calls: See comment for notifier_call_chain 469 * 470 * Calls each function in a notifier chain in turn. The functions 471 * run in a process context, so they are allowed to block. 472 * 473 * If the return value of the notifier can be and'ed 474 * with %NOTIFY_STOP_MASK then srcu_notifier_call_chain() 475 * will return immediately, with the return value of 476 * the notifier function which halted execution. 477 * Otherwise the return value is the return value 478 * of the last notifier function called. 479 */ 480 int __srcu_notifier_call_chain(struct srcu_notifier_head *nh, 481 unsigned long val, void *v, 482 int nr_to_call, int *nr_calls) 483 { 484 int ret; 485 int idx; 486 487 idx = srcu_read_lock(&nh->srcu); 488 ret = notifier_call_chain(&nh->head, val, v, nr_to_call, nr_calls); 489 srcu_read_unlock(&nh->srcu, idx); 490 return ret; 491 } 492 EXPORT_SYMBOL_GPL(__srcu_notifier_call_chain); 493 494 int srcu_notifier_call_chain(struct srcu_notifier_head *nh, 495 unsigned long val, void *v) 496 { 497 return __srcu_notifier_call_chain(nh, val, v, -1, NULL); 498 } 499 EXPORT_SYMBOL_GPL(srcu_notifier_call_chain); 500 501 /** 502 * srcu_init_notifier_head - Initialize an SRCU notifier head 503 * @nh: Pointer to head of the srcu notifier chain 504 * 505 * Unlike other sorts of notifier heads, SRCU notifier heads require 506 * dynamic initialization. Be sure to call this routine before 507 * calling any of the other SRCU notifier routines for this head. 508 * 509 * If an SRCU notifier head is deallocated, it must first be cleaned 510 * up by calling srcu_cleanup_notifier_head(). Otherwise the head's 511 * per-cpu data (used by the SRCU mechanism) will leak. 512 */ 513 void srcu_init_notifier_head(struct srcu_notifier_head *nh) 514 { 515 mutex_init(&nh->mutex); 516 if (init_srcu_struct(&nh->srcu) < 0) 517 BUG(); 518 nh->head = NULL; 519 } 520 EXPORT_SYMBOL_GPL(srcu_init_notifier_head); 521 522 #endif /* CONFIG_SRCU */ 523 524 static ATOMIC_NOTIFIER_HEAD(die_chain); 525 526 int notrace notify_die(enum die_val val, const char *str, 527 struct pt_regs *regs, long err, int trap, int sig) 528 { 529 struct die_args args = { 530 .regs = regs, 531 .str = str, 532 .err = err, 533 .trapnr = trap, 534 .signr = sig, 535 536 }; 537 RCU_LOCKDEP_WARN(!rcu_is_watching(), 538 "notify_die called but RCU thinks we're quiescent"); 539 return atomic_notifier_call_chain(&die_chain, val, &args); 540 } 541 NOKPROBE_SYMBOL(notify_die); 542 543 int register_die_notifier(struct notifier_block *nb) 544 { 545 vmalloc_sync_all(); 546 return atomic_notifier_chain_register(&die_chain, nb); 547 } 548 EXPORT_SYMBOL_GPL(register_die_notifier); 549 550 int unregister_die_notifier(struct notifier_block *nb) 551 { 552 return atomic_notifier_chain_unregister(&die_chain, nb); 553 } 554 EXPORT_SYMBOL_GPL(unregister_die_notifier); 555