Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

tty: make tty_ldisc_ops a param in tty_unregister_ldisc

Make tty_unregister_ldisc symmetric to tty_register_ldisc by accepting
struct tty_ldisc_ops as a parameter instead of ldisc number. This avoids
checking of the ldisc number bounds in tty_unregister_ldisc.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: William Hubbs <w.d.hubbs@gmail.com>
Cc: Chris Brannon <chris@the-brannons.com>
Cc: Kirk Reiser <kirk@reisers.ca>
Cc: Samuel Thibault <samuel.thibault@ens-lyon.org>
Cc: Marcel Holtmann <marcel@holtmann.org>
Cc: Johan Hedberg <johan.hedberg@gmail.com>
Cc: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Wolfgang Grandegger <wg@grandegger.com>
Cc: Marc Kleine-Budde <mkl@pengutronix.de>
Cc: Andreas Koensgen <ajk@comnets.uni-bremen.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Rodolfo Giometti <giometti@enneenne.com>
Cc: Peter Ujfalusi <peter.ujfalusi@gmail.com>
Cc: Liam Girdwood <lgirdwood@gmail.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Jaroslav Kysela <perex@perex.cz>
Cc: Takashi Iwai <tiwai@suse.com>
Link: https://lore.kernel.org/r/20210505091928.22010-17-jslaby@suse.cz
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Jiri Slaby and committed by
Greg Kroah-Hartman
f81ee8b8 839e0f22

+24 -28
+1 -1
drivers/accessibility/speakup/spk_ttyio.c
··· 219 219 220 220 void spk_ttyio_unregister_ldisc(void) 221 221 { 222 - if (tty_unregister_ldisc(N_SPEAKUP)) 222 + if (tty_unregister_ldisc(&spk_ttyio_ldisc_ops)) 223 223 pr_warn("speakup: Couldn't unregister ldisc\n"); 224 224 } 225 225
+1 -1
drivers/bluetooth/hci_ldisc.c
··· 917 917 #endif 918 918 919 919 /* Release tty registration of line discipline */ 920 - err = tty_unregister_ldisc(N_HCI); 920 + err = tty_unregister_ldisc(&hci_uart_ldisc); 921 921 if (err) 922 922 BT_ERR("Can't unregister HCI line discipline (%d)", err); 923 923 }
+1 -1
drivers/input/serio/serport.c
··· 304 304 305 305 static void __exit serport_exit(void) 306 306 { 307 - tty_unregister_ldisc(N_MOUSE); 307 + tty_unregister_ldisc(&serport_ldisc); 308 308 } 309 309 310 310 module_init(serport_init);
+3 -3
drivers/misc/ti-st/st_core.c
··· 872 872 st_gdata = kzalloc(sizeof(struct st_data_s), GFP_KERNEL); 873 873 if (!st_gdata) { 874 874 pr_err("memory allocation failed"); 875 - err = tty_unregister_ldisc(N_TI_WL); 875 + err = tty_unregister_ldisc(&st_ldisc_ops); 876 876 if (err) 877 877 pr_err("unable to un-register ldisc %ld", err); 878 878 err = -ENOMEM; ··· 892 892 if (err) { 893 893 pr_err("error during st_ll initialization(%ld)", err); 894 894 kfree(st_gdata); 895 - err = tty_unregister_ldisc(N_TI_WL); 895 + err = tty_unregister_ldisc(&st_ldisc_ops); 896 896 if (err) 897 897 pr_err("unable to un-register ldisc"); 898 898 return err; ··· 919 919 kfree_skb(st_gdata->rx_skb); 920 920 kfree_skb(st_gdata->tx_skb); 921 921 /* TTY ldisc cleanup */ 922 - err = tty_unregister_ldisc(N_TI_WL); 922 + err = tty_unregister_ldisc(&st_ldisc_ops); 923 923 if (err) 924 924 pr_err("unable to un-register ldisc %ld", err); 925 925 /* free the global data pointer */
+1 -1
drivers/net/caif/caif_serial.c
··· 447 447 spin_unlock(&ser_lock); 448 448 ser_release(NULL); 449 449 cancel_work_sync(&ser_release_work); 450 - tty_unregister_ldisc(N_CAIF); 450 + tty_unregister_ldisc(&caif_ldisc); 451 451 debugfs_remove_recursive(debugfsdir); 452 452 } 453 453
+1 -1
drivers/net/can/slcan.c
··· 784 784 kfree(slcan_devs); 785 785 slcan_devs = NULL; 786 786 787 - i = tty_unregister_ldisc(N_SLCAN); 787 + i = tty_unregister_ldisc(&slc_ldisc); 788 788 if (i) 789 789 printk(KERN_ERR "slcan: can't unregister ldisc (err %d)\n", i); 790 790 }
+1 -1
drivers/net/hamradio/6pack.c
··· 781 781 { 782 782 int ret; 783 783 784 - if ((ret = tty_unregister_ldisc(N_6PACK))) 784 + if ((ret = tty_unregister_ldisc(&sp_ldisc))) 785 785 printk(msg_unregfail, ret); 786 786 } 787 787
+1 -1
drivers/net/hamradio/mkiss.c
··· 967 967 { 968 968 int ret; 969 969 970 - if ((ret = tty_unregister_ldisc(N_AX25))) 970 + if ((ret = tty_unregister_ldisc(&ax_ldisc))) 971 971 printk(msg_unregfail, ret); 972 972 } 973 973
+1 -1
drivers/net/ppp/ppp_async.c
··· 1016 1016 1017 1017 static void __exit ppp_async_cleanup(void) 1018 1018 { 1019 - if (tty_unregister_ldisc(N_PPP) != 0) 1019 + if (tty_unregister_ldisc(&ppp_ldisc) != 0) 1020 1020 printk(KERN_ERR "failed to unregister PPP line discipline\n"); 1021 1021 } 1022 1022
+1 -1
drivers/net/ppp/ppp_synctty.c
··· 727 727 static void __exit 728 728 ppp_sync_cleanup(void) 729 729 { 730 - if (tty_unregister_ldisc(N_SYNC_PPP) != 0) 730 + if (tty_unregister_ldisc(&ppp_sync_ldisc) != 0) 731 731 printk(KERN_ERR "failed to unregister Sync PPP line discipline\n"); 732 732 } 733 733
+1 -1
drivers/net/slip/slip.c
··· 1360 1360 kfree(slip_devs); 1361 1361 slip_devs = NULL; 1362 1362 1363 - i = tty_unregister_ldisc(N_SLIP); 1363 + i = tty_unregister_ldisc(&sl_ldisc); 1364 1364 if (i != 0) 1365 1365 printk(KERN_ERR "SLIP: can't unregister line discipline (err = %d)\n", i); 1366 1366 }
+1 -1
drivers/pps/clients/pps-ldisc.c
··· 131 131 { 132 132 int err; 133 133 134 - err = tty_unregister_ldisc(N_PPS); 134 + err = tty_unregister_ldisc(&pps_ldisc_ops); 135 135 if (err) 136 136 pr_err("can't unregister PPS line discipline\n"); 137 137 else
+2 -2
drivers/tty/n_gsm.c
··· 3280 3280 err_put_driver: 3281 3281 put_tty_driver(gsm_tty_driver); 3282 3282 err_unreg_ldisc: 3283 - tty_unregister_ldisc(N_GSM0710); 3283 + tty_unregister_ldisc(&tty_ldisc_packet); 3284 3284 return status; 3285 3285 } 3286 3286 3287 3287 static void __exit gsm_exit(void) 3288 3288 { 3289 - int status = tty_unregister_ldisc(N_GSM0710); 3289 + int status = tty_unregister_ldisc(&tty_ldisc_packet); 3290 3290 if (status != 0) 3291 3291 pr_err("n_gsm: can't unregister line discipline (err = %d)\n", 3292 3292 status);
+1 -2
drivers/tty/n_hdlc.c
··· 822 822 823 823 static void __exit n_hdlc_exit(void) 824 824 { 825 - /* Release tty registration of line discipline */ 826 - int status = tty_unregister_ldisc(N_HDLC); 825 + int status = tty_unregister_ldisc(&n_hdlc_ldisc); 827 826 828 827 if (status) 829 828 pr_err("N_HDLC: can't unregister line discipline (err = %d)\n",
+1 -1
drivers/tty/n_null.c
··· 57 57 58 58 static void __exit n_null_exit(void) 59 59 { 60 - tty_unregister_ldisc(N_NULL); 60 + tty_unregister_ldisc(&null_ldisc); 61 61 } 62 62 63 63 module_init(n_null_init);
+3 -6
drivers/tty/tty_ldisc.c
··· 87 87 * takes tty_ldiscs_lock to guard against ldisc races 88 88 */ 89 89 90 - int tty_unregister_ldisc(int disc) 90 + int tty_unregister_ldisc(struct tty_ldisc_ops *ldisc) 91 91 { 92 92 unsigned long flags; 93 93 int ret = 0; 94 94 95 - if (disc < N_TTY || disc >= NR_LDISCS) 96 - return -EINVAL; 97 - 98 95 raw_spin_lock_irqsave(&tty_ldiscs_lock, flags); 99 - if (tty_ldiscs[disc]->refcount) 96 + if (tty_ldiscs[ldisc->num]->refcount) 100 97 ret = -EBUSY; 101 98 else 102 - tty_ldiscs[disc] = NULL; 99 + tty_ldiscs[ldisc->num] = NULL; 103 100 raw_spin_unlock_irqrestore(&tty_ldiscs_lock, flags); 104 101 105 102 return ret;
+1 -1
include/linux/tty.h
··· 637 637 } 638 638 639 639 extern int tty_register_ldisc(struct tty_ldisc_ops *new_ldisc); 640 - extern int tty_unregister_ldisc(int disc); 640 + extern int tty_unregister_ldisc(struct tty_ldisc_ops *ldisc); 641 641 extern int tty_set_ldisc(struct tty_struct *tty, int disc); 642 642 extern int tty_ldisc_receive_buf(struct tty_ldisc *ld, const unsigned char *p, 643 643 const char *f, int count);
+1 -1
net/nfc/nci/uart.c
··· 462 462 463 463 static void __exit nci_uart_exit(void) 464 464 { 465 - tty_unregister_ldisc(N_NCI); 465 + tty_unregister_ldisc(&nci_uart_ldisc); 466 466 } 467 467 468 468 module_init(nci_uart_init);
+1 -1
sound/soc/ti/ams-delta.c
··· 583 583 { 584 584 struct snd_soc_card *card = platform_get_drvdata(pdev); 585 585 586 - if (tty_unregister_ldisc(N_V253) != 0) 586 + if (tty_unregister_ldisc(&cx81801_ops) != 0) 587 587 dev_warn(&pdev->dev, 588 588 "failed to unregister V253 line discipline\n"); 589 589