Page MenuHomeFreeBSD

bdrewery (Bryan Drewery)
User

Projects

User Details

User Since
May 10 2014, 4:48 PM (604 w, 6 d)

Recent Activity

Today

bdrewery updated subscribers of D54183: net-mgmt/net-snmp: Respect LDFLAGS..
Fri, Dec 12, 1:21 AM
bdrewery requested review of D54183: net-mgmt/net-snmp: Respect LDFLAGS..
Fri, Dec 12, 1:21 AM

Sat, Dec 6

bdrewery committed R11:786bd3a436d6: ports-mgmt/poudriere-devel: Update to 3.3.0-2473-gd507571d3 (authored by bdrewery).
ports-mgmt/poudriere-devel: Update to 3.3.0-2473-gd507571d3
Sat, Dec 6, 3:57 AM
bdrewery committed R11:4434bb7aa6d0: ports-mgmt/poudriere-devel: Update to 3.3.0-2473-gd507571d3 (authored by bdrewery).
ports-mgmt/poudriere-devel: Update to 3.3.0-2473-gd507571d3
Sat, Dec 6, 3:51 AM

Tue, Dec 2

bdrewery added inline comments to D48873: Fix remaining zgrep(1) wrapper script regressions.
Tue, Dec 2, 4:27 PM

Mon, Dec 1

bdrewery committed R11:d79adfcc8797: ports-mgmt/poudriere-devel: Fix build with WITH_PIE. (authored by bdrewery).
ports-mgmt/poudriere-devel: Fix build with WITH_PIE.
Mon, Dec 1, 10:37 PM
bdrewery committed R11:0e118b00db5c: ports-mgmt/poudriere-devel: Fix build with WITH_PIE. (authored by bdrewery).
ports-mgmt/poudriere-devel: Fix build with WITH_PIE.
Mon, Dec 1, 10:37 PM

Fri, Nov 28

bdrewery committed R11:cc3728bfe5c2: ports-mgmt/poudriere-devel: Remove DEBUG for now. (authored by bdrewery).
ports-mgmt/poudriere-devel: Remove DEBUG for now.
Fri, Nov 28, 3:04 AM
bdrewery committed R11:60d18bc31524: ports-mgmt/poudriere-devel: Remove DEBUG for now. (authored by bdrewery).
ports-mgmt/poudriere-devel: Remove DEBUG for now.
Fri, Nov 28, 3:04 AM
bdrewery committed R11:5d111deb3255: ports-mgmt/poudriere-devel: Update to 3.3.0-2467-g1e1cd81b9 (authored by bdrewery).
ports-mgmt/poudriere-devel: Update to 3.3.0-2467-g1e1cd81b9
Fri, Nov 28, 2:49 AM
bdrewery committed R11:45618801ac68: ports-mgmt/poudriere-devel: Update to 3.3.0-2467-g1e1cd81b9 (authored by bdrewery).
ports-mgmt/poudriere-devel: Update to 3.3.0-2467-g1e1cd81b9
Fri, Nov 28, 2:49 AM
bdrewery committed R11:8f503469ff61: ports-mgmt/poudriere-devel: Mark BROKEN for now due to a bulk error. (authored by bdrewery).
ports-mgmt/poudriere-devel: Mark BROKEN for now due to a bulk error.
Fri, Nov 28, 2:21 AM
bdrewery committed R11:9b7c03a8d79c: ports-mgmt/poudriere-devel: Mark BROKEN for now due to a bulk error. (authored by bdrewery).
ports-mgmt/poudriere-devel: Mark BROKEN for now due to a bulk error.
Fri, Nov 28, 2:20 AM

Thu, Nov 27

bdrewery added a comment to D53964: pkg: Move FreeBSD-base to pkg.freebsd.org.

We could probably shave off several seconds for many people by replacing pkg+https with pkg+http. The TLS n-way handshake is a complete waste of time. I have made this observation about the other repositories as well but...

Windmills. Have to keep trying.

Agreed. All https buys us here is quieting an FAQ. It otherwise adds time and potentially has problems in some corporate setups.

It does provide a little bit of protection against rollback attacks. Not much, though; there's a reason I used HTTP for freebsd-update.

The main reason I used HTTPS here was because that's what the other repositories used and I wanted to minimize the number of bikesheds I had to paint.

Thu, Nov 27, 11:07 PM
bdrewery committed R11:38e348dd759d: ports-mgmt/poudriere-devel: Clarify what DEBUG is (authored by bdrewery).
ports-mgmt/poudriere-devel: Clarify what DEBUG is
Thu, Nov 27, 10:58 PM
bdrewery committed R11:f0742d338b31: ports-mgmt/poudriere-devel: Clarify what DEBUG is (authored by bdrewery).
ports-mgmt/poudriere-devel: Clarify what DEBUG is
Thu, Nov 27, 10:58 PM
bdrewery added a comment to D53964: pkg: Move FreeBSD-base to pkg.freebsd.org.

We could probably shave off several seconds for many people by replacing pkg+https with pkg+http. The TLS n-way handshake is a complete waste of time. I have made this observation about the other repositories as well but...

Windmills. Have to keep trying.

Thu, Nov 27, 10:45 PM
bdrewery committed R11:24e46aa1fc9e: ports-mgmt/poudriere-devel: Update to 3.3.0-2465-g5b7655549 (authored by bdrewery).
ports-mgmt/poudriere-devel: Update to 3.3.0-2465-g5b7655549
Thu, Nov 27, 10:28 PM
bdrewery committed R11:376e0db03f1c: ports-mgmt/poudriere-devel: Update to 3.3.0-2210-ge92c28b8d (authored by bdrewery).
ports-mgmt/poudriere-devel: Update to 3.3.0-2210-ge92c28b8d
Thu, Nov 27, 10:28 PM
bdrewery committed R11:c26a67ce3154: ports-mgmt/poudriere-devel: Support DEBUG option (authored by bdrewery).
ports-mgmt/poudriere-devel: Support DEBUG option
Thu, Nov 27, 10:28 PM
bdrewery committed R11:a3a657318f57: ports-mgmt/poudriere-devel: Update to 3.3.0-2465-g5b7655549 (authored by bdrewery).
ports-mgmt/poudriere-devel: Update to 3.3.0-2465-g5b7655549
Thu, Nov 27, 10:28 PM
bdrewery committed R11:43ef4c5faf2e: ports-mgmt/poudriere-devel: Support DEBUG option (authored by bdrewery).
ports-mgmt/poudriere-devel: Support DEBUG option
Thu, Nov 27, 10:28 PM
bdrewery added a comment to D53944: java/bootstrap-openjdk17: Add missing libX11 dependency.

I'm not sure if this or SHLIB_REQUIRE_IGNORE_GLOB=* is the right path forward. The prebuilt binary wants a bunch of libraries that are not set as LIB_DEPENDS. It applies to all 3 of the bootstrap-openjdk ports.

Thu, Nov 27, 7:24 PM

Tue, Nov 25

bdrewery added a comment to D53723: java/bootstrap-openjdk*: Mark these ports as bundling libraries..

Yep I see now that the libraries aren't bundled.

Tue, Nov 25, 8:55 PM
bdrewery added a reverting change for D53723: java/bootstrap-openjdk*: Mark these ports as bundling libraries.: R11:bd6fc4ae943b: java/bootstrap-openjdk*: Revert 13f33637597..
Tue, Nov 25, 8:54 PM
bdrewery committed R11:bd6fc4ae943b: java/bootstrap-openjdk*: Revert 13f33637597. (authored by bdrewery).
java/bootstrap-openjdk*: Revert 13f33637597.
Tue, Nov 25, 8:54 PM
bdrewery added a reverting change for R11:13f336375974: java/bootstrap-openjdk*: Mark these ports as bundling libraries.: R11:bd6fc4ae943b: java/bootstrap-openjdk*: Revert 13f33637597..
Tue, Nov 25, 8:54 PM
bdrewery added a reverting change for D53723: java/bootstrap-openjdk*: Mark these ports as bundling libraries.: R11:845acc2903f0: java/bootstrap-openjdk*: Revert 13f33637597..
Tue, Nov 25, 8:53 PM
bdrewery committed R11:845acc2903f0: java/bootstrap-openjdk*: Revert 13f33637597. (authored by bdrewery).
java/bootstrap-openjdk*: Revert 13f33637597.
Tue, Nov 25, 8:53 PM
bdrewery added a reverting change for R11:13f336375974: java/bootstrap-openjdk*: Mark these ports as bundling libraries.: R11:845acc2903f0: java/bootstrap-openjdk*: Revert 13f33637597..
Tue, Nov 25, 8:53 PM
bdrewery added a comment to D53723: java/bootstrap-openjdk*: Mark these ports as bundling libraries..

None of the libraries listed as required here are bundled, so it has done the right thing and the bootstrap now do not provide lib anymore so it will never be proposed instead of a regular openjdk

Tue, Nov 25, 8:28 PM
bdrewery added a comment to D53723: java/bootstrap-openjdk*: Mark these ports as bundling libraries..
pkg_cleanup_shlibs_required(pkg, &internal_provided);

Seems it is supposed to just work, hm.

Tue, Nov 25, 3:41 PM
bdrewery added a comment to D53723: java/bootstrap-openjdk*: Mark these ports as bundling libraries..

@bapt I'm not sure this did what I expected.
It added the annotation but it still marked all of the libs as required.

# pkg info -F bootstrap-openjdk17-17.0.1.12.1_2.pkg
bootstrap-openjdk17-17.0.1.12.1_2
Name           : bootstrap-openjdk17
Version        : 17.0.1.12.1_2
Origin         : java/bootstrap-openjdk17
Architecture   : FreeBSD:14:amd64
Prefix         : /usr/local
Categories     : devel java
Licenses       : GPLv2
Maintainer     : java@FreeBSD.org
WWW            : https://openjdk.java.net/
Comment        : Java Development Kit 17
Shared Libs required:
        libX11.so.6
        libXext.so.6
        libXi.so.6
        libXrender.so.1
        libXtst.so.6
        libasound.so.2
        libc++.so.1
        libc.so.7
        libcxxrt.so.1
        libdl.so.1
        libfontconfig.so.1
        libfreetype.so.6
        libgcc_s.so.1
        libgif.so.7
        libharfbuzz.so.0
        libjpeg.so.8
        liblcms2.so.2
        libm.so.5
        libpng16.so.16
        libthr.so.3
        libutil.so.9
        libz.so.6
Annotations    :
        FreeBSD_version: 1400097
        build_timestamp: 2025-11-13T00:01:02+00:00
        built_by       : poudriere-git-3.3.0-2420-g3a7024568
        no_provide_shlib: yes
        port_checkout_unclean: no
        ports_top_checkout_unclean: yes
        ports_top_git_hash: a5581322a5c3da107f83705f91c9900b8c219ae3
Flat size      : 252MiB
Description    :
OpenJDK is an open-source implementation of the Java Platform, Standard Edition.
Tue, Nov 25, 3:40 PM

Tue, Nov 18

bdrewery accepted D53761: sh: Don't assume EINTR means SIGALRM.
Tue, Nov 18, 3:34 PM
bdrewery accepted D53793: sh: Fix job pointer invalidation with trapsasync.

Thank you

Tue, Nov 18, 2:35 AM
bdrewery accepted D53761: sh: Don't assume EINTR means SIGALRM.

This one passes all of the Poudriere tests too (more read -t use than a bulk run). The previous problem was -t $n taking n seconds. bin/sh tests lack checking for duration on read -t.

Tue, Nov 18, 1:49 AM

Sun, Nov 16

bdrewery accepted D53773: sh: Fix a double free in a rare scenario with pipes.

Passes all of the poudriere tests. Thank you for looking at quickly. This change looks much better than my attempt.

Sun, Nov 16, 12:32 AM

Fri, Nov 14

bdrewery added a comment to D53761: sh: Don't assume EINTR means SIGALRM.

Edited my comment with a more cleaned up version.

Fri, Nov 14, 7:45 PM
bdrewery added a comment to D53761: sh: Don't assume EINTR means SIGALRM.

This works for me. It could be cleaned up more. Confirmed it prevents the original issue reported.

  • check status == 1.
  • handle -t 0 special, which avoids clock_gettime and doesn't sleep forever.
Fri, Nov 14, 7:31 PM
bdrewery requested changes to D53761: sh: Don't assume EINTR means SIGALRM.
# echo yes | /usr/bin/time ./sh -c 'read -t 5 n; echo $n'
yes
        5.00 real         0.92 user         4.05 sys

should be 0. We may need another test case using timeout(1).

Fri, Nov 14, 6:47 PM
bdrewery added a comment to D53761: sh: Don't assume EINTR means SIGALRM.

This passes the sh tests but times out on poudriere. Looking into why.

Fri, Nov 14, 6:18 PM
bdrewery committed R11:93e6a6861b02: java/bootstrap-openjdk*: Mark these ports as bundling libraries. (authored by bdrewery).
java/bootstrap-openjdk*: Mark these ports as bundling libraries.
Fri, Nov 14, 6:02 PM
bdrewery closed D53723: java/bootstrap-openjdk*: Mark these ports as bundling libraries..
Fri, Nov 14, 6:01 PM
bdrewery committed R11:13f336375974: java/bootstrap-openjdk*: Mark these ports as bundling libraries. (authored by bdrewery).
java/bootstrap-openjdk*: Mark these ports as bundling libraries.
Fri, Nov 14, 6:01 PM
bdrewery added a comment to D53761: sh: Don't assume EINTR means SIGALRM.

My intuition is we'll need a SIGALRM handler which is going to get tricky to not interfere with user traps. I haven't thought on it deeply.

Fri, Nov 14, 5:43 PM
bdrewery added a comment to D53761: sh: Don't assume EINTR means SIGALRM.

Poudriere's test suite has more testing of this timeout and SIGALRM. It checks for timeout adjusting on [EINTR] and ensuring timeout runs within the period specified. If you want to try that you'll need to modify external/sh/miscbltin.c with the patch and then use make checkquick. Or I can check on the next patch.

Fri, Nov 14, 5:36 PM
bdrewery requested changes to D53761: sh: Don't assume EINTR means SIGALRM.
Fri, Nov 14, 5:30 PM

Thu, Nov 13

bdrewery updated the summary of D53723: java/bootstrap-openjdk*: Mark these ports as bundling libraries..
Thu, Nov 13, 5:08 PM

Wed, Nov 12

bdrewery requested review of D53723: java/bootstrap-openjdk*: Mark these ports as bundling libraries..
Wed, Nov 12, 11:42 PM

Nov 12 2025

Herald added a reviewer for D6531: Finds all all dynamic executable dependencies that aren't within the set of immediate package dependencies.: portmgr.

Poudriere depends on these libraries being recorded properly. So I am adding PROXYDEPS_FATAL=1 to poudriere testport and poudriere bulk -t. Some attention will come to this check soon.

Nov 12 2025, 3:33 AM

Nov 11 2025

bdrewery added a comment to D48697: Framework: Allow setting the 'vital' flag from a port.

If it gets directly used in the ports tree we can just add a commit hook to block it. Probably should anyway.

Nov 11 2025, 12:27 AM
bdrewery added a comment to D48697: Framework: Allow setting the 'vital' flag from a port.

I have the same use case and setup on my systems with meta packages. I had manually done pkg set -v1 on the packages but some recent change means I need to use this port flag now.

Nov 11 2025, 12:24 AM

Nov 10 2025

bdrewery accepted D53624: kern_thread: thread_suspend_check(1) must never suspend.

I have not reviewed each case but have been running it without problems and it looks reasonable.

Nov 10 2025, 4:51 PM

Nov 7 2025

bdrewery committed rG5d55553e160a: sh tests: Fix racy test11.0 (authored by bdrewery).
sh tests: Fix racy test11.0
Nov 7 2025, 5:38 PM

Nov 6 2025

bdrewery added a comment to D53624: kern_thread: thread_suspend_check(1) must never suspend.

Thanks for the quick fix! It passes my repro.

Nov 6 2025, 9:10 PM
bdrewery added a comment to D53624: kern_thread: thread_suspend_check(1) must never suspend.

Testing this now.

Nov 6 2025, 7:34 PM

Nov 4 2025

bdrewery added inline comments to D53499: sh: $(alias) is safe to not fork..
Nov 4 2025, 3:09 PM

Nov 2 2025

bdrewery accepted D53533: Makefile.incl1: .WAIT before distribute in etc.
Nov 2 2025, 4:51 PM

Nov 1 2025

bdrewery added inline comments to D53499: sh: $(alias) is safe to not fork..
Nov 1 2025, 3:39 AM
bdrewery updated the diff for D53499: sh: $(alias) is safe to not fork..

sh: Avoid builtin cmdsubst forking in more cases.

Nov 1 2025, 3:38 AM
bdrewery added a comment to D53499: sh: $(alias) is safe to not fork..

Ah even an interactive shell doing a fork on $(fc -l) doesn't make sense. But I'm willing to skip that one.

Nov 1 2025, 3:34 AM
bdrewery added a comment to D53499: sh: $(alias) is safe to not fork..

I reviewed the cases. The only missing ones were the ones you mentioned. alias, alias NAME, hash, hash -v. readonly [-p] is covered by EXPORTCMD.

Nov 1 2025, 3:23 AM
bdrewery abandoned D53499: sh: $(alias) is safe to not fork..

Closing this for now until I find time to finish it.

Nov 1 2025, 2:35 AM
bdrewery added a comment to D53499: sh: $(alias) is safe to not fork..
Nov 1 2025, 2:29 AM

Oct 31 2025

bdrewery added a comment to D53499: sh: $(alias) is safe to not fork..

I'm only intending this to target $(alias) and $(alias --). I don't think it would be common but I've at least written some code that duplicates some aliases with different handling if they exist, and found $(alias) forking unexpectedly.
Is alias -= a thing?

Oct 31 2025, 8:40 PM
bdrewery updated the diff for D53499: sh: $(alias) is safe to not fork..

Fix spelling :|

Oct 31 2025, 3:21 PM
bdrewery requested review of D53499: sh: $(alias) is safe to not fork..
Oct 31 2025, 3:20 PM

Oct 26 2025

bdrewery committed R11:401e02acf7df: ports-mgmt/poudriere-devel: Update to 3.3.0-2210-ge92c28b8d (authored by bdrewery).
ports-mgmt/poudriere-devel: Update to 3.3.0-2210-ge92c28b8d
Oct 26 2025, 10:59 PM

Oct 24 2025

bdrewery added a comment to D53312: truss: Return child exit code as truss exit code.

Maybe adding a flag for this makes sense? I don't know how important truss status is to people.

Oct 24 2025, 12:17 AM
bdrewery requested review of D53312: truss: Return child exit code as truss exit code.
Oct 24 2025, 12:14 AM
bdrewery committed rG35f375549c7f: cut: Avoid undefined behavior. (authored by bdrewery).
cut: Avoid undefined behavior.
Oct 24 2025, 12:03 AM
bdrewery committed rG30394f3c87cd: clock_gettime(2): Remove unneeded trailing wording. (authored by bdrewery).
clock_gettime(2): Remove unneeded trailing wording.
Oct 24 2025, 12:03 AM
bdrewery committed rGab4abce6c2c2: pwait: Avoid calling getpid(2) for each proc. (authored by bdrewery).
pwait: Avoid calling getpid(2) for each proc.
Oct 24 2025, 12:03 AM
bdrewery closed D53226: cut: Avoid undefined behavior..
Oct 24 2025, 12:03 AM

Oct 22 2025

bdrewery added a comment to D53273: security/openssh-portable: Update line numbers.

Do you have a single patch I can test? Or a poudriere bulk secrurity/openssh-portable@all successful build?

Oct 22 2025, 10:35 PM
bdrewery accepted D53266: security/openssh-portable: Remove blocklist probe.
Oct 22 2025, 10:33 PM

Oct 20 2025

bdrewery requested review of D53226: cut: Avoid undefined behavior..
Oct 20 2025, 7:06 PM

Oct 19 2025

bdrewery committed R11:5716ec5ecffd: ports-mgmt/poudriere: Update to 3.4.4 (authored by bdrewery).
ports-mgmt/poudriere: Update to 3.4.4
Oct 19 2025, 4:01 PM
bdrewery committed R11:9feb28f42715: bsd.port.mk: WARNINGs: Don't exec sleep if the value is 0. (authored by bdrewery).
bsd.port.mk: WARNINGs: Don't exec sleep if the value is 0.
Oct 19 2025, 4:01 PM
bdrewery committed R11:c9dae3d9eebe: ports-mgmt/poudriere: Update to 3.4.4 (authored by bdrewery).
ports-mgmt/poudriere: Update to 3.4.4
Oct 19 2025, 4:01 PM

Oct 15 2025

bdrewery committed R11:9f09f84b2dd5: ports-mgmt/poudriere-devel: Update to 3.3.0-2209-g282bb7247 (authored by bdrewery).
ports-mgmt/poudriere-devel: Update to 3.3.0-2209-g282bb7247
Oct 15 2025, 4:50 AM
bdrewery committed R11:83f27745b914: ports-mgmt/poudriere-devel: Update to 3.3.0-2209-g282bb7247 (authored by bdrewery).
ports-mgmt/poudriere-devel: Update to 3.3.0-2209-g282bb7247
Oct 15 2025, 4:49 AM
bdrewery committed R11:83cf180b6da0: ports-mgmt/poudriere-devel: Update to 3.3.0-2209-g282bb7247 (authored by bdrewery).
ports-mgmt/poudriere-devel: Update to 3.3.0-2209-g282bb7247
Oct 15 2025, 4:49 AM

Oct 14 2025

bdrewery committed R11:09300d0be1b5: ports-mgmt/poudriere-devel: Fix handling LOCALIPARGS (authored by bdrewery).
ports-mgmt/poudriere-devel: Fix handling LOCALIPARGS
Oct 14 2025, 3:56 PM
bdrewery committed R11:290718abb820: ports-mgmt/poudriere-devel: Fix handling LOCALIPARGS (authored by bdrewery).
ports-mgmt/poudriere-devel: Fix handling LOCALIPARGS
Oct 14 2025, 3:56 PM
bdrewery committed R11:1f691971b4a0: ports-mgmt/poudriere-devel: Fix handling LOCALIPARGS (authored by bdrewery).
ports-mgmt/poudriere-devel: Fix handling LOCALIPARGS
Oct 14 2025, 3:55 PM
bdrewery committed R11:2bf57f0c0e56: shells/dash: Update to v0.5.13 (authored by bdrewery).
shells/dash: Update to v0.5.13
Oct 14 2025, 3:55 PM

Oct 13 2025

bdrewery committed R11:493286b42c45: ports-mgmt/poudriere-devel: Update to 3.3.0-2186-gdb737522d (authored by bdrewery).
ports-mgmt/poudriere-devel: Update to 3.3.0-2186-gdb737522d
Oct 13 2025, 3:01 PM
bdrewery committed R11:f4484011907c: ports-mgmt/poudriere-devel: Update to 3.3.0-2186-gdb737522d (authored by bdrewery).
ports-mgmt/poudriere-devel: Update to 3.3.0-2186-gdb737522d
Oct 13 2025, 3:00 PM
bdrewery committed R11:3d1cec883738: ports-mgmt/poudriere-devel: Update to 3.3.0-2186-gdb737522d (authored by bdrewery).
ports-mgmt/poudriere-devel: Update to 3.3.0-2186-gdb737522d
Oct 13 2025, 2:59 PM

Oct 12 2025

bdrewery committed R11:a2f551caf64b: security/openssh-portable: Update to 10.2p1 (authored by bdrewery).
security/openssh-portable: Update to 10.2p1
Oct 12 2025, 3:46 AM

Oct 11 2025

bdrewery committed R11:08772b31e171: security/openssh-portable: Sync blocklist with base (authored by jlduran).
security/openssh-portable: Sync blocklist with base
Oct 11 2025, 6:04 PM
bdrewery closed D52880: security/openssh-portable: Sync blocklist patch.
Oct 11 2025, 5:31 PM
bdrewery committed R11:28bb20eaf642: security/openssh-portable: Sync blocklist with base, include by default. (authored by jlduran).
security/openssh-portable: Sync blocklist with base, include by default.
Oct 11 2025, 5:31 PM
bdrewery added inline comments to D52880: security/openssh-portable: Sync blocklist patch.
Oct 11 2025, 4:21 PM
bdrewery added inline comments to D52880: security/openssh-portable: Sync blocklist patch.
Oct 11 2025, 4:14 PM
bdrewery accepted D52880: security/openssh-portable: Sync blocklist patch.

Thank you.

Oct 11 2025, 4:09 PM

Oct 10 2025

bdrewery accepted D53032: sockstat: Fix build reproducibility.
Oct 10 2025, 8:49 PM
bdrewery added inline comments to D53032: sockstat: Fix build reproducibility.
Oct 10 2025, 8:44 PM
bdrewery added inline comments to D53032: sockstat: Fix build reproducibility.
Oct 10 2025, 8:30 PM